6

Aus irgendeinem Grund denkt meine Produktion Laravel App, dass es in der lokalen Umgebung ist.Laravel 4.1 Bereitstellung - Produktion .env.php wird nicht erkannt

/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 (via 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 festgelegt werden, oder Laravel erkennt nicht meine .env.php Datei für die Produktionsumgebung .

aktualisieren

Mit etwas Hilfe von Anultro im IRC, scheint es, dass .env.php noch nicht geladen ist. Daher muss APP_ENV gesetzt werden, bevor Laravel versucht, Umgebungen zu erkennen. Dies ist sinnvoll, da Laravel wissen muss, welche Umgebung ausgeführt wird, bevor festgelegt wird, ob .env.php oder verwendet werden soll.

Nachdem dies gesagt ist, .env.php sollte noch DB-Anmeldeinformationen und geheime Schlüssel etc speichern verwendet werden ... Aber ich habe immer noch ein Problem, weil die App noch falsch zurückkehrt, wenn ich versuche getenv('DB_NAME')

Irgendwelche Vorschläge zu laufen ?

+0

mich korrigieren, wenn ich falsch bin, aber ich habe noch nie von Laravel gehört, das automatisch eine '.env.php' für die Umgebungserkennung behandelt? Sind Sie sicher, dass die Datei irgendwo enthalten ist? – Quasdunk

+0

@Quasdunk - http://laravel.com/docs/configuration#environment-configuration und https://laracasts.com/lessons/private-keys-go-here (möglicherweise müssen Sie für ein Abonnement bezahlen, um Zugang zu erhalten das Video). – Gravy

+0

@Quasdunk - Sie werden auch sehen, dass '.env.php' und' .env.local.php' in der Standarddatei '.gitignore' enthalten sind. – Gravy

Antwort

3

Für alle, die wissen wollen ... dieses Problem zu lösen, ich meine httpd.conf nur auf dem Produktionsserver bearbeiten wie folgt:

SetEnv APP_ENV production 

Jetzt Laravel weiß, dass der App in der Produktion ist.

Wenn Sie mit nginx, die ich jetzt meine Seite migriert haben folgendes hinzuzufügen, wo Sie Skripts zum FCGI Server in den aktiven sites-available passieren /etc/nginx/sites-available/{sitename}:

fastcgi_param APP_ENV production; 
+0

Soße: Können Sie uns bitte den Speicherort der httpd.conf mitteilen? Ich kämpfe für diesen halben Tag hier und immer noch ist der Kampf an ... – score

+0

@SHANKAR - Für jedes Betriebssystem/Setup anders. Meine ist in '/ usr/local/apache/conf' mit CentOS 5.5. Führen Sie eine Google-Suche nach httpd.conf aus und fügen Sie Ihr Betriebssystem und die Version ein. – Gravy

+0

Vielen Dank für Ihre Antwort. Ich bin auf LAMP und konnte es ohne Konfiguration der Datei httd.conf aussortieren. Mein Problem war, dass ich die Variable env näher verwendete (getenv ('ENV')). Später habe ich mich in Array definiert und es hat danach funktioniert. Ich habe es gerade für zukünftige Besucher geschrieben. Danke noch einmal. – score