web-dev-qa-db-de.com

Neuladen von .env-Variablen ohne Neustart des Servers (Laravel 5, Shared Hosting)

Mein Laravel 5 hat OK ausgeführt, bis die Datenbank konfiguriert wurde, und dann diesen Fehler gefunden:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

Nachforschungen haben ergeben, dass ich den MySQL-Zugriff zu spät konfiguriert habe. Daher sollte ich den Server neu starten, um die richtigen Umgebungsvariablen zu erhalten. Nun, ich verwende den freigegebenen Server von Dreamhost und kann das einfach nicht.

Wie soll ich dieses Problem beheben?

Vielen Dank

22
godsaway

Wenn Sie php artisan config:cache auf Ihrem Server, dann könnte Ihre Laravel App veraltete Konfigurationseinstellungen zwischenspeichern, die Sie in den .env Datei.

Lauf php artisan config:clear um das zu beheben.

55
morph

Möglicherweise werden Ihre Konfigurationsvariablen zwischengespeichert. Überprüfen Sie Ihr config/app.php sowie dein .env Datei dann versuchen

php artisan cache:clear

in der Befehlszeile.

12
AurelienT

Ich weiß, dass dies alt ist, aber für lokale Entwickler hat dies die Dinge zurück in eine .env-Produktionsdatei gebracht:

rm bootstrap/cache/config.php

dann

php artisan config:cache
php artisan config:clear
php artisan cache:clear
5
Janiis

Eine kurze Lösung:

use Dotenv;

with(new Dotenv(app()->environmentPath(), app()->environmentFile()))->overload();
with(new LoadConfiguration())->bootstrap(app());

In meinem Fall musste ich die Datenbankverbindung wiederherstellen, nachdem ich .env programmgesteuert geändert hatte, aber es funktionierte nicht. Wenn Sie in diese Schwierigkeiten geraten, versuchen Sie dies

app('db')->purge($connection->getName()); 

nach dem erneuten Laden von .env liegt das daran, dass die Laravel App möglicherweise zuvor auf die Standardverbindung zugegriffen hat und das \Illuminate\Database\DatabaseManager muss die Konfigurationsparameter erneut lesen.

4
MatteoOreficeIT

Für den Fall, dass jemand auf diese Frage stößt, der seinen Webserver nicht neu laden kann (lang laufender Konsolenbefehl wie ein Warteschlangenläufer) oder seine .env-Datei mitten in der Anfrage neu laden muss, habe ich einen Weg gefunden, um .env-Variablen in laravel 5.

use Dotenv;
use InvalidArgumentException;

try {
    Dotenv::makeMutable();
    Dotenv::load(app()->environmentPath(), app()->environmentFile());
    Dotenv::makeImmutable();
} catch (InvalidArgumentException $e) {
    //
}
3
Question Mark

Um klar zu sein, gibt es 4 Arten von Caches, die Sie je nach Fall löschen können.

php artisan cache:clear

Sie können die obige Anweisung in Ihrer Konsole ausführen, wenn Sie den Anwendungscache löschen möchten. Diese Anweisung löscht alle Caches im Verzeichnis storage\framework\cache.

php artisan route:cache

Dadurch wird der Routen-Cache geleert. Wenn Sie also eine neue Route hinzugefügt oder einen Routencontroller oder eine Aktion geändert haben, können Sie diese verwenden, um dieselbe neu zu laden.

php artisan config:cache 

Dies löscht das Caching der env-Datei und lädt sie neu

php artisan view:clear 

Dadurch werden die kompilierten Ansichtsdateien Ihrer Anwendung gelöscht.

Für Shared Hosting

Die meisten Shared Hosting-Anbieter bieten keinen SSH-Zugang zu den Systemen. In diesem Fall müssen Sie eine Route erstellen und die folgende Zeile aufrufen:

Route::get('/clear-cache', function() {
    Artisan::call('cache:clear');
    return "All cache cleared";
});
0