Laravel 5.2 liest keine env-Datei


108

Nach dem Upgrade auf Laravel 5.2 wird keiner meiner .envDatewerte gelesen. Ich habe die Upgrade-Anweisungen befolgt . Keine meiner Konfigurationsdateien außer auth.php wurde geändert. Sie funktionierten alle gut in der vorherigen Version 5.1.19

.env enthält Werte wie

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php enthält

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

Ich erhalte diesen Fehler:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)

Offensichtlich nicht in meiner env Konfiguration ziehen. Dies betrifft jede einzelne meiner Konfigurationsdateien, einschließlich von Drittanbietern wie bugsnag.

Ich habe es auch versucht

php artisan config:clear
php artisan cache:clear

Aktualisieren

Ich versuche es php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]

Ich habe versucht, eine neue Kopie von Laravel 5.2 zu installieren. Ich habe im Grunde nur in meinen appOrdner kopiert ; Es sind keine zusätzlichen Komponistenpakete enthalten. Immer noch das gleiche Problem. Ich habe andere Laravel 5.2-Projekte auf demselben Server, die einwandfrei funktionieren.


1
Sind Sie sicher, dass die .env-Datei nur .env heißt? Nicht .env.beispiel?
James Elliott

Andrew bearbeitest du die .env-Datei über die Forge-Oberfläche oder lädst du sie hoch?
Mark Davidson

@ JamesElliott ja es ist.env
andrewtweber

1
Oder führen Sie dies lokal aus? Wenn Sie unter Handwerker arbeiten, müssen Sie es neu starten, nur für den Fall, dass dies der Fall sein könnte.
Mark Davidson

@ MarkDavidson bearbeiten es über vi in ​​der Befehlszeile, und nein, es ist auf einem vollen Server
andrewtweber

Antworten:


90

Aus den offiziellen Laravel 5.2 Upgrade Notes:

Wenn Sie den config:cacheBefehl während der Bereitstellung verwenden, müssen Sie sicherstellen, dass Sie die envFunktion nur aus Ihren Konfigurationsdateien heraus und nicht von einer anderen Stelle in Ihrer Anwendung aus aufrufen .

Wenn Sie envinnerhalb Ihrer Anwendung anrufen , wird dringend empfohlen, Ihren Konfigurationsdateien die richtigen Konfigurationswerte hinzuzufügen und envstattdessen von diesem Speicherort aus anzurufen , damit Sie Ihre envAnrufe in configAnrufe umwandeln können .

Referenz: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cachelöste es für mich - nichts anderes hatte geholfen. Nicht einmal php artisan config:clear- danke!
Kair

36
Laravel 5.3 php artisan config:clearist das einzige, was für mich funktioniert hat
Peon

9
Laravel 5.4 - auf einem VPS bereitgestellt: php artisan config:clearhat für mich funktioniert. Ich habe vorher keinen config: cache gemacht, daher schien es etwas seltsam, dass ich den Cache leeren musste.
Antonio


Stellen Sie sicher, dass Sie .envanstelle der .env.exampleDatei bearbeiten
Connor Leech

82

Wenn eine Ihrer .envVariablen Leerzeichen enthält, stellen Sie sicher, dass Sie sie in doppelte Anführungszeichen setzen. Beispielsweise:

SITE_NAME="My website"

Vergessen Sie nicht, Ihren Cache vor dem Testen zu leeren:

php artisan config:cache
php artisan config:clear

Ja, es funktioniert. Nachdem Sie einen Wert in der .envDatei geändert haben, führen Sie den php artisan config:cache & php artisan config:clearBefehl aus. Es wird klappen.
Chandan Sharma

39

Beeindruckend. Guter Kummer. Das liegt daran, dass ich einen env-Wert mit einem Leerzeichen hatte, das nicht von Anführungszeichen umgeben ist

Dies

SITE_NAME=My website

Daran geändert

SITE_NAME="My website"

Behoben. Ich denke, das hatte damit zu tun, dass Laravel 5.2 jetzt vlucas / phpdotenv von 1.1.1 auf 2.1.0 aktualisiert


Gleiches Denken - scheint, als würden Leerzeichen Probleme .envunter 5.2 verursachen, während dies in 5.1 nicht der Fall war.
Thomthom

5
Und dies ist einer meiner (vielen) Fehler bei Laravel: Es hat die Angewohnheit, manchmal eine Vielzahl von Konfigurations- und / oder anderen Arten von Fehlern stillschweigend zu ignorieren und zu akzeptieren, ohne dass Anzeichen dafür vorliegen, dass etwas schief gelaufen ist. Angesichts dessen mag dies ein "Feature" von sein phpdotenv, aber Laravel weiß immer noch, dass eine .envDatei enthalten sein muss und dass sie nicht erfolgreich war, sich aber nicht die Mühe macht, es jemandem zu erzählen.
dKen

2
Ich habe schon Stunden mit etwas so Dummem verschwendet. Danke, dass du mich davon abgehalten hast, mehr zu verschwenden!
Jenski

25

Für mich hat es in dieser Reihenfolge geklappt:

php artisan config:cache
php artisan config:clear
php artisan cache:clear

Und ich habe alle Pausen ohne Glück versucht.


2
Diese Bestellung löste mein Problem nach einigen Stunden Debugging.
Minion

Hat mein Leben gerettet. Tks. Aber ich habe nicht verstanden warum.
Mateus Galasso

Diese Bestellung hat mich gerettet. Danke
Asad ullah

Vielen Dank, freundlicher Internet-Fremder, das hat es geschafft!
Eduardo

Wenn Sie jedes Mal, wenn ich zu dieser Antwort komme, 1 US-Dollar erhalten würden, wären Sie bereits reich. Vielen Dank!
Altin

24

Ich hatte ein ähnliches Problem in meinem config/services.phpund löste es mit config clearund optimizeBefehlen:

php artisan config:clear
php artisan optimize

23

Für mich hat folgendes funktioniert

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear

16

Führen Sie Folgendes aus:

php artisan config:clear
php artisan cache:clear

dann
php artisan config:cache


11

Ich hatte das gleiche Problem in der lokalen Umgebung, das ich von gelöst habe

  1. PHP Artisan Konfiguration: klar
  2. PHP Artisan Config: Cache
  3. und dann den Befehl PHP Artisan Serve abbrechen und erneut starten.

8

Ich habe dies in der Upgrade-Anleitung verpasst:

Fügen Sie Ihrer app.phpKonfigurationsdatei eine env-Konfigurationsoption hinzu, die wie folgt aussieht: 'env' => env('APP_ENV', 'production')

Durch Hinzufügen dieser Zeile wurde die lokale .envDatei korrekt eingelesen.


1
Ich glaube, ich habe den gleichen Fehler erhalten, da meine App Laravel 4 war, dann auf 5.0, dann auf 5.1 usw. aktualisiert wurde. Vermutlich wurde das Hinzufügen dieses Werts in meiner app.php verpasst. Danke, dass du mir viel Zeit gespart hast. Hier ist eine positive Bewertung!
Bruno P. Kinoshita

8

Wenn Sie den Befehl ausgelöst haben, php artisan config:cachewerden alle envVariablen env()gelöscht und es werden Nullwerte ausgegeben. Versuchen Sie, den folgenden Befehl auszuführen, und boomen Sie dort env()erneut, um alle envVariablen abzufangen

php artisan config:clear

8

Sie können das Problem durch die folgende Empfehlung lösen

Empfehlung 1:

Sie müssen die .env-Datei über Konfigurationsdateien verwenden. Das bedeutet, dass Sie aufgefordert werden, die .env-Datei aus Konfigurationsdateien (z. B. /config/app.php oder /config/database.php) zu lesen. Anschließend können Sie die Konfiguration verwenden Dateien von jedem Ort Ihres Projekts.

Empfehlung 2: Stellen Sie Ihren env-Wert in doppelten Anführungszeichen ein

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"

Empfehlung 3: Behalten Sie die folgende Befehlssequenz bei, nachdem Sie eine Konfiguration oder einen Umgebungswert geändert haben.

 composer dump-autoload
 composer dump-autoload -o

 php artisan clear-compiled
 php artisan optimize

 php artisan route:clear
 php artisan view:clear

 php artisan cache:clear
 php artisan config:cache
 php artisan config:clear

Empfehlung 4: Wenn die Syntax1 nicht funktioniert, können Sie eine andere Syntax2 ausprobieren

   $val1 = env('VARIABLE_NAME');     // syntax1
   $val2 = getenv('VARIABLE_NAME');  // syntax2
   echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;

Empfehlung 5: Wenn Ihre Benutzeranzahl hoch / höher ist, müssen Sie die zugehörige Speichergröße in der Serverkonfiguration erhöhen .

Empfehlung 6: Legen Sie einen wahrscheinlichen Standardwert fest, wenn Sie die Variable .env lesen.

 $googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
 $googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
 $googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");

7

Die Einfachheit ist die Kraft:

php artisan config:cache

Du wirst erhalten:

Konfigurationscache geleert!

Konfiguration erfolgreich zwischengespeichert!



5

Das Gleiche passiert, wenn sich der Port in Ihrer lokalen .env befindet

wieder machen die doppelten Anführungszeichen den Trick

APP_URL="http://localhost:8000"

und dann

php artisan config:clear

4

Stellen Sie zusätzlich zu dem, was @andrewtweber vorgeschlagen hat, sicher, dass zwischen KEY = und dem Wert keine Leerzeichen stehen, es sei denn, es steht zwischen Anführungszeichen

.env Datei zB:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

zu:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...

3

Ich bin auf meinem Lokal auf dasselbe Problem gestoßen, und ich habe alle Antworten hier ausprobiert, aber ohne Erfolg. Nur das hat bei mir funktioniert php artisan config:clearund restart server. Klappt wunderbar!


4
@ RameshMhetre versuchen php artisan config:cache, php artisan config:cleardannphp artisan cache:clear
Dexter Bengil

2

Ich habe dieses Problem beim Generieren eines neuen Schlüssels mit dem folgenden Befehl gelöst: php artisan key:generate


2

Wenn Sie während der lokalen Entwicklung config: cache aufgerufen haben, können Sie dies rückgängig machen, indem Sie die Datei bootstrap / cache / config.php löschen. und das ist Arbeit für mich.


2

Wenn Sie während der lokalen Entwicklung config: cache aufgerufen haben, können Sie dies rückgängig machen, indem Sie die Datei bootstrap / cache / config.php löschen. und das ist Arbeit für mich.

@ Payal Pandav hat den obigen Kommentar abgegeben.

Ich möchte eine einfache Problemumgehung erläutern. Bearbeiten Sie einfach die Datei config.php im Ordner bootstrap / cache /. Und ändern Sie die Anmeldeinformationen. Das hat bei mir funktioniert. Bitte löschen Sie diese Datei nicht, da diese möglicherweise andere wichtige Daten in der Produktionsumgebung enthält.


2

In meinem Fall funktioniert Laravel 5.7 env('APP_URL')nicht, aber es config('app.url')funktioniert. Wenn ich der envund der Konfiguration eine neue Variable hinzufüge, funktioniert dies nicht, aber nach dem php artisan config:cacheStart funktioniert es.


3
Wenn Sie sich in der Entwicklungsumgebung befinden, sollten Sie Ihre Konfiguration und Routen nicht zwischenspeichern. Um den gesamten Cache zu entfernen, können Sie php artisan optimize:clear
Folgendes

@ZohaibHassan Wie deaktiviere ich den Cache für Konfiguration und Routen in der Entwicklungsumgebung?
Kamil Kiełczewski

1
Der obige Befehl wird
deaktiviert

1
Nur für die Konfiguration, die Sie verwenden können php artisan config:clear, wird php artisan config:cacheIhr Konfigurationscache
geleert

1

Wenn Sie diesen php artisan config:cacheBefehl auf der Konsole ausführen, werden alle Inhalte der .env-Datei im Cache gespeichert. Wenn Sie nach diesem Befehl Inhalte an die .env-Datei anhängen, ist sie erst verfügbar, wenn Sie den php artisan config:clearBefehl ausführen


1

Ich habe das gleiche Problem viel Zeit während der Larvenentwicklung. Manchmal funktioniert env nicht mehr und gibt keinen Wert zurück. Dieser Grund kann unterschiedlich sein und hängt von Ihrer Situation ab. aber in meinem Fall vor ein paar Tagen renne ich einfach

 PHP artisan::config:clear

Verwenden Sie diesen Befehl daher vorsichtig. weil es alle Konfigurationsdaten aus seinem Cache löscht. Danach wird kein Wert mehr zurückgegeben. In dieser Situation müssen Sie dies zuerst verwenden, wenn Sie den Befehl PHP artisan config :: clear ausgeführt haben.

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!

1

Ich habe das erlebt. Grund war, dass Apache (Benutzer www-data) aufgrund von Dateiberechtigungen .env nicht lesen konnte. Also habe ich die Dateiberechtigungen geändert, um sicherzustellen, dass der Server (Apache) Leseberechtigungen für die Datei hat. Genau das und Boom, jetzt hat alles funktioniert!
Update:
Die Vorgehensweise hängt davon ab, wem die .env-Datei gehört. Vorausgesetzt, sie gehört zur Apache- www-dataGruppe, können Sie Folgendes tun:

sudo chmod g+r .env

Ändern Sie es abhängig von Ihrer Berechtigungsstruktur.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.Das ist eigentlich ein falscher Ansatz. Sie sollten die apaxhe-Konfiguration repariert haben, damit diese bestimmte Site als Eigentümer dieser Dateien dient
Marcin Orlowski,

0

Ich habe den Fehler gemacht, indem ich dd / die / dump in der index.phpDatei gemacht habe. Dies führt dazu, dass das System die Konfigurationen nicht neu generiert.

Einfach Dump in View-Dateien reichen aus. Die Änderungen an der .envDatei werden sofort aktualisiert.


0

Ich hatte einige Probleme damit. Irgendwo in der App schien es sich um ein Dateiberechtigungsproblem zu handeln - nicht um die .env-Datei.

Ich musste - mein Docker stoppen - chown verwenden, um meinem eigenen Benutzer für das gesamte Projekt Eigentumsrechte festzulegen - Docker erneut starten

Diesmal hat es funktioniert.


-1

Versuchte fast alle der oben genannten. Am Ende zu tun

chmod 666 .env

was funktioniert hat. Dieses Problem tritt anscheinend immer wieder in der App auf, die ich geerbt habe. Das letzte Mal war dies nach dem Hinzufügen eines .env.testing. Laravel ausführen 5.8

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.