Komisch Laravel 5-caching mithilfe von falschen Datenbank-name
Habe ich zwei Laravel-APIs, das eine AngularJS-app alle auf meinem lokalen Entwicklungsrechner. Ich bin immer ein komisch Problem, wenn die Winkel-Seite aufruft, Beiträge zu beiden APIs, wo es scheint zu sein, mit der falschen Datenbank-name (es ist die andere Laravel Instanz der Datenbank). Laravel wirft eine Ausnahme, die sagt Table database.table
nicht gefunden, wo die Datenbank ist die falsche Datenbank. Ich habe versucht, Sie anzurufen, jede der APIs mit Postboten und das funktioniert einwandfrei, und ich bin sicher, es gibt keine Erwähnung der anderen Datenbank, die entweder im Projekt.
Mir scheint das ein caching-Problem sein, wo die .env-Datei zwischengespeichert werden und gemeinsam zwischen den beiden Laravel Server aus irgendeinem Grund. Sowohl der Laravel-apps gehostet werden, die auf Apache. Ich habe versucht, Sie anzurufen php artisan config:clear
und legen Sie die entsprechenden Header in der .htaccess-Dateien, um zu versuchen, um zu verhindern, dass keine Zwischenspeicherung, aber keiner von denen hat funktioniert. Ich habe auch versucht, auf mehrere Browser gelöscht, den cache, und immer noch der gleiche Fehler.
Ich möchte in der Lage sein zu verwenden .env-Datei, so dass ich eine eindeutige Konfiguration für mein development server also würde ich eher nicht hart Kodieren der Anmeldeinformationen für die Datenbank in config/database.php
. Irgendwelche Ideen, was könnte das Problem sein?
Beide database.php Dateien Aussehen:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Wo die eigenen Einstellungen sind gespeichert in .env
- Ich habe immer noch nicht gelöst, aber als vorübergehende Lösung hab ich jetzt nur die Festlegung der Anmeldeinformationen für die Datenbank in app/config/database.php basierend auf dem Wert von env('APP_ENV') eher als das speichern in der .env-Datei
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was für mich gearbeitet war klar, dass eine Reihe der Laravel-Einstellungen, indem Sie die folgenden Befehle ausführen:
Ich bin mir nicht sicher, welcher Befehl es getan haben, aber Laravel jetzt erkennt/liest .env-Datei korrekt für meine Datenbank-Konfiguration.
Wenn jemand immer noch dieses Problem, wie ich es war. Dann können Sie den Befehl verwenden:
nach der Einstellung der Umwelt wie erwähnt hier.
Das problem ist jetzt, dass, wenn ein team-Mitglied etwas ändert in eine Umwelt-Datei von einem beliebigen Produkt, dieser Befehl sollte sicherlich laufen.
Erlebte ich das gleiche problem und in meinem Fall war es verursacht durch die Ausgabe berichtet von toddbc auf https://github.com/vlucas/phpdotenv/issues/76.
Laravel setzt auf
vlucas/phpdotenv
verwendet PHP ' sputenv()
hinzufügen von Werten aus der.env
Datei, so dass Sie zugänglich für Ihre Anwendung. AllerdingsSo, zwei Instanzen von PHP (in meinem Fall aus verschiedenen Anwendungen) waren in der Lage zu Lesen der environment-Variablen die Zugehörigkeit zu jeder anderen während concurrrent Anfragen.
Als vlucas hilfsbereit, erklärt in seiner Antwort auf die Frage melden, dies ist das erwartete Verhalten und die Lösung ist zum definieren von environment-Variablen in der webserver config-Datei.
Was für mich gearbeitet wurde, um die zu entfernen
DB_HOST
,DB_DATABASE
,DB_USERNAME
,DB_PASSWORD
Zeilen aus meiner.env
- Datei und fügen Sie den folgenden, um meine Apache vhost config-block:(Nicht vergessen den Apache neu starten nach dem ändern der config)
Beachten Sie, dass wenn Sie eine Laravel-app in deinem web-root, und ein zusätzlicher Laravel-app installiert in einem Unterverzeichnis, verwendet der Apache Alias Direktive zum weiterleiten von Anforderungen an die richtige Anwendung ist, müssen Sie
SetEnvIf
für BEIDE Sätze von Datenbank-Anmeldeinformationen, etwa so:(Für eine Erklärung, warum Sie nicht verwenden können, eine Kombination von
SetEnv
undSetEnvIf
finden Sie https://staff.washington.edu/fmf/2013/04/24/using-setenv-and-setenvif-together-in-apache/)Die nette Sache über diese Lösung (wenn es funktioniert) ist, dass es nur noch umgesetzt werden, die Umgebungen, wo sich das problem manifestiert, d.h. wenn es wirkt sich nur auf Ihren lokalen dev-Umgebung, dann muss nichts geändert werden, die auf dem Produktionsserver.
Einen server-Neustart mit
php artisan serve
behoben haben das gleiche problem für michAlte Frage, aber nur für den Fall, jemand findet dieses Ihnen geschieht (wie soeben bei mir passiert) meine einfache Lösung war, ändern Sie die Namen der .env-Variablen, die in einem der Projekte:
Ändern Sie dann die Variablen in config\database.php zu Lesen:
Nun sollte man nicht die cross-Kontamination detailliert in Mark ' s Antwort
Ich habe genau das gleiche problem. Zu einer web-Seite Anfrage 5 json-Antworten mit anderen Daten-sets von laravel und etwa die Hälfte der Anträge wird die Bombe mit einer "falsch" Datenbank " - Fehler, obwohl, wenn Sie und laden Sie die genauen Anforderungen in Ihrem eigenen browser-tab Sie funktionieren. Scheint wie eine Laravel Fehler müssen mit der Handhabung gleichzeitige web-Zugriffe von apache.
Sowieso, mein workaround war zu hart-code host, db, username und Passwort für alle verbindungen in meinem config\database.php Datei, und jetzt ist mein json-Anfragen keine Bombe mehr. Es nervt jedoch, zu haben, um hard-code, Kennwörter in den Quellcode kontrollieren und sich mit mehreren Umgebungen - im wesentlichen geht zurück in das dunkle Mittelalter vor .env-Dateien existierte.