laravel

Laravel liest nicht .env-Datei nach Änderung

Laravel liest nicht .env-Datei nach Änderung

Problem

Dies ist ein ziemlich häufiges Problem, das bei neuen Laravel-Entwicklern auftritt.

Viele Leute haben versucht, ihre .env-Datei, nur um zu sehen, dass beim Aktualisieren der Anwendung die .env config Werte werden nicht angezeigt.

Und was noch interessanter ist, ist, dass dies ziemlich oft angezeigt wird, nachdem Sie Ihre Laravel-Version aktualisiert haben.

So hättest du das zum Beispiel in deinem .env-Datei:

DB_DATABASE=laraveldb
DB_USERNAME=laraveluser

Dann natürlich in der Konfiguration/Datenbank.php-Datei hättest du diese:

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

forge steht hier für Standardwerte. Dies bedeutet, dass diese Werte verwendet werden, falls Sie Ihre Angaben nicht gemacht haben DB_DATABASE und DB_USERNAME Werte in dir .env-Datei. Diese Informationen werden in Kürze hilfreich sein.

Jetzt wissen Sie, dass Sie dieses spezifische Problem haben, wenn Sie auf die folgende Ausnahme stoßen:

PDOException: SQLSTATE[HY000] [1045] Zugriff verweigert für Benutzer 'lar'@'localhost'
(mit Passwort: NEIN)

Dies zeigt deutlich, dass Ihre Laravel-Anwendung den Standardwert von Ihrem einzieht Konfiguration/Datenbank.php Datei und nicht von Ihrem .env .

Bevor Sie etwas anderes tun, können Sie auch versuchen, dieses Problem mit PHP Artisan Tinker zu überprüfen:

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> falsch
>>> config('Datenbank.Verbindungen.mysql.Datenbank')
=> "lar"
>>> dd($_ENV)
[]

Du wirst oft sehen, dass es auch keinen Unterschied macht, die folgenden Dinge zu tun:. Entwickler versuchen jedoch, ihre Konfiguration zu testen, indem sie eine komplett neue Laravel-Installation ausführen und einfach den alten App-Ordner kopieren. Sie führen keine Composer-Paketinstallationen aus oder tun etwas anderes.

Sofern Sie nicht Linux verwenden (ich werde Ihnen später sagen, warum), werden Sie keine Änderungen sehen see.

Lösung

Wie immer gibt es viele Dinge, die Sie tun können, um dieses Problem zu lösen, aber einige davon sind eher erfolgreich.

Löschen Sie Ihren Konfigurationscache

Wenn nicht, müssen Sie zunächst Ihren Konfigurationscache leeren, bevor Sie etwas anderes tun können.

Da unser Code heutzutage so viele Bibliotheken verwendet, sind wir gezwungen, Dinge zwischenzuspeichern, um während der Laufzeit schnell darauf zugreifen zu können.

Ich hatte persönlich Probleme damit unter Windows und Mac, aber mir ist aufgefallen, dass diese Konfigurationsdateien unter Linux (Ubuntu) aus irgendeinem Grund entweder mit einem Hook gelöscht werden oder überhaupt nicht zwischengespeichert werden, weil ich dies tun konnte Laden Sie die Anwendung neu mit neu .env-Werte, ohne Folgendes zu tun.

Stellen Sie sicher, dass Sie Ihren Konfigurationscache leeren, indem Sie die folgenden Befehle ausführen:

php Handwerker config:cache
php Handwerker-Konfiguration: löschen

Suchen Sie nach leeren Stellen in Ihrem .env-Datei

Die nächste Lösung besteht darin, weiße Räume in Ihrem zu haben .env-Datei. Und dieses hier, wenn die meisten Leute scheitern und anfangen, sich die Haare zu reißen.

Es ist sehr leicht, dies zu übersehen, aber als Beispiel, was Sie in Ihrem haben könnten .env-Datei sieht in etwa so aus:

SITE_NAME=Meine Laravel-Anwendung

Dies allein wird nicht funktionieren, da weiße Leerzeichen die .env-Datei.

Sie müssen Ihre Werte wie folgt in die Anführungszeichen einschließen:

SITE_NAME="Meine Laravel-Anwendung"

Diesmal sollte alles gut gehen.

Stellen Sie einfach sicher, dass Sie Ihren Konfigurationscache jedes Mal leeren, wenn Sie eine Änderung vornehmen. Wir können dies wie zuvor tun:

php Handwerker config:cache
php Handwerker-Konfiguration: löschen
Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...
0 A.D. Lernprogramm
Von den vielen Strategiespielen da draußen, 0 A.D. schafft es, sich trotz Open Source als umfassender Titel und sehr tiefgehendes, taktisches Spiel ab...
Unity3D-Tutorial
Einführung in Unity 3D Unity 3D ist eine leistungsstarke Engine für die Spieleentwicklung. Es ist plattformübergreifend, das heißt, Sie können Spiele ...