2016-03-31 7 views
2

Ich versuche, meine App, die gut funktioniert in lokalen zu implementieren.getenv funktioniert nicht in EC2 Server

Sache ist, wenn Versuch:

dd(getenv('APP_ENV')); 

es "false"

kehrt aber wenn ich ssh und Art verbinden:

php artisan env 

ich

production 

Beliebig Idee, warum es aufgehört hat zu arbeiten G???

Für die Aufzeichnung in der Produktion, führt mein deploy Skript 3 Befehle:

composer dump-autoload -o 
php artisan route:cache 
php artisan config:cache 

ich es zu erwähnen, weil es möglicherweise die einzige Software Config, die anders ist, ist.

EDIT: Ich identifiziere, dass der problematische Befehl lautet:

php artisan config:cache 

Wenn wenn tun:

php artisan config:clear 

Problem gelöst ist.

Tx!

+0

Wo genau ist das 'dd' Code aus ausgeführt? – Bogdan

+0

in meiner Fußzeile. Aktualisierte Frage. Problem ist PHP Artisan Config: Cache. Aber immer noch nicht wissen, was los ist –

+0

Haben Sie versucht, config: cache aus Ihren Bereitstellungsskripten wegzulassen? –

Antwort

1

Wenn ein im Cache gespeicherte Config die .env-Datei verwendet wird, nicht mehr so ​​getenv nutzlos ist, weil die Config aus geladen wird:

bootstrap/cache/config.php 

Stattdessen können Sie die aktuelle Umgebung aus der geladenen Anwendungskonfiguration wie so erhalten:

config('app.env'); 

Oder direkt mit der app Hilfsfunktion:

app('env'); 

Als dritte Option können Sie immer die environment Methode verwenden, um die aktuelle Umgebung zu erhalten:

app()->environment(); // or App::environment() 

Laravel verwendet die dotenv Bibliothek intern die Konfigurationsschlüssel aus der .env-Datei zu laden und add them to the environment variables mit putenv , aber wenn Sie Ihre Konfiguration zwischenspeichern, wird der Ladevorgang nicht mehr durchgeführt, da Laravel feststellt, dass eine Cache-Datei vorhanden ist und diese stattdessen verwendet, sodass die Schlüssel von .env nicht in die Umgebung geladen werden. Dies ist über getenv nicht möglich.

Und weil Konfigurationswerte aus der .env Datei nur zwischengespeichert werden, wenn sie in einer aktuellen Konfigurationsdatei aus dem config Verzeichnis verwendet werden, müssen Sie eine Konfigurationsoption erstellen für sie und zugänglich im Cache gespeichert werden, wenn Sie den Cache verwenden .

Also, wenn Sie mit diesem Wert eine BASE_URL Schlüssel in Ihrer .env Datei haben:

BASE_URL=http://domain.com/ 

Wenn Sie seinen Wert in der Lage sein wollen, zugreifen, wenn die Konfiguration zwischengespeichert wird, müssen Sie es verwenden in eine Konfigurationsdatei Zum Beispiel können Sie es zu Ihrem config/app.php Datei hinzufügen wie folgt:

'base_url' => env('BASE_URL') 

Dann können Sie auch zugreifen, wenn die Konfiguration iit mit:

config('app.base_url') 

Sie mehr über den Zugriff auf die Konfigurationswerte lesen in der Laravel Documentation.

+0

ok, es Sinn –

+0

Cool, froh macht ich helfen konnte – Bogdan

+0

, was mir nicht klar ist,!. ist, wie env abrufen vars, wenn im Cache gespeichert. ich kann differents Fällen für Entwickler oder prod, aber ich sehe jetzt, wo, wie zum abrufen meiner gecached env var –

Verwandte Themen