Laravel 4.1 Deployment - Produktion .env.php nicht erkannt wird
Aus irgendeinem Grund, meine Produktion laravel-app denkt, dass es in der lokalen Umgebung.
/var/www/appname/.env.php
<?php
return
[
'APP_ENV' => 'production',
'DB_HOST' => 'HIDDEN',
'DB_NAME' => 'HIDDEN',
'DB_PASSWORD' => 'HIDDEN'
];
/var/www/appname/bootstrap/start.php
$env = $app->detectEnvironment(function()
{
return getenv('APP_ENV') ?: 'local';
});
/var/www/appname/app/config/database.php
...
...
'mysql' => array(
'driver' => 'mysql',
'host' => getenv('DB_HOST'),
'database' => getenv('DB_NAME'),
'username' => getenv('DB_USERNAME'),
'password' => getenv('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'lar_',
),
...
...
sudo php artisan env
(per SSH)
`Current application environment: local
php artisan tinker
dann getenv('DB_NAME')
$ php artisan tinker
[1] > getenv('DB_NAME');
//false
Also entweder meine Umgebungsvariablen nicht gesetzt ist, oder Laravel ist nicht die Anerkennung meiner .env.php
- Datei in der Produktionsumgebung.
Update
Mit etwas Hilfe von Anultro im IRC, es scheint, dass .env.php ist noch nicht geladen. Als solche APP_ENV muss festgelegt werden, bevor laravel versucht zu erkennen Umgebungen. Dies macht Sinn, weil Laravel muss wissen, in welcher Umgebung ausgeführt wird, bevor ermittelt wird, ob .env.php
oder .env.local.php
.
Nachdem dies gesagt ist, .env.php
sollte immer noch verwendet werden, zum speichern von db-Zugangsdaten und geheimen Schlüsseln etc... Aber ich habe immer noch ein problem, denn die app ist immer noch false zurückgeben, wenn ich versuche zu laufen getenv('DB_NAME')
Irgendwelche Vorschläge?
- Korrigieren Sie mich, wenn ich falsch bin, aber ich habe noch nie gehört, Laravel automatisch Umgang mit einem
.env.php
für Umwelt-Erkennung? Sind Sie sicher, die Datei wird irgendwo? - laravel.com/docs/configuration#environment-configuration und laracasts.com/lessons/private-keys-go-here (Sie müssen möglicherweise zu zahlen für ein Abonnement, um Zugriff auf das video).
- Sie werden auch sehen, dass
.env.php
und.env.local.php
sind enthalten in der Standard -.gitignore
- Datei. - Danke für die links, ich war eigentlich nicht bewusst! Sie Leben, Sie lernen 🙂 Leider habe ich keine Idee, was das problem sein könnte dann. Vielleicht könnten Sie überprüfen Sie die Datei Berechtigungen und stellen Sie sicher, dass
.env.php
lesbar ist oder dass die Anwendung erlaubt das setzen von Umgebungsvariablen mit allen Namen. Dies kann hilfreich sein (vor allem die Beschreibung übersafe_mode_allowed_env_vars
): de3.php.net/manual/en/function.putenv.php - laravel 4.1 Unordnung zu groß. ich habe ein etwas anderes problem. es erkennt die Umwelt, kann Sie aber nicht laden Sie die richtige config-Dateien.... (4.0.9 läuft wunderbar mit gleichen codes) laravel 4.0.* waren viel besser als diese 4.1 konnte Ihnen nicht helfen, mit diesem, wie ich selbst bin versucht zu finden, warum der hack ist nicht be-richtigen Dateien.
- Hallo, bitte finden Sie in den aktualisierten Frage - halb-Lösung, aber die Umgebungsvariablen noch nicht gelesen von der Produktion Anwendung.
- ein update für diese Lösung?
- Setzen Sie die Umgebungsvariablen auf die live-server in httpd.conf-Datei oder über eine include-Datei. Siehe meine Antwort unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für alle, die wissen möchten,... um dieses Problem zu lösen, nur ich bearbeitet meine httpd.conf-Datei auf dem Produktions-server wie folgt:
Nun laravel weiß, dass die app ist in der Produktion.
Wenn Sie mit nginx, die ich jetzt migriert auf meiner Website fügen Sie den folgenden, wo Sie pass-Skripte auf die FCGI-server in der active sites-available
/etc/nginx/sites-available/{sitename}
:/usr/local/apache/conf
mit CentOS 5.5. Eine google-Suche für httpd.conf Speicherort und geben Sie Ihre OS und version