dotenv erfordert .env-Datei, die auf die Produktion
Ich bin mit dotenv für PHP zu verwalten, die Umwelt-Einstellungen (nicht lavarel aber ich habe es markiert, weil lavarel auch verwendet dotenv)
Habe ich ausgeschlossen .env von der code-Basis und ich habe die .env.Beispiel für alle anderen Mitarbeiter
Auf der github-Seite von dotenv:
phpdotenv ist für die Entwicklungs-Umgebungen und sollten in der Regel nicht in der Produktion eingesetzt werden. In der Produktion werden die aktuellen Umgebungsvariablen sollten gesetzt werden, so dass kein overhead für das laden der .env-Datei für jede Anforderung. Erreicht werden kann dies über einen automatisierten deployment-Prozess mit tools wie Vagrant, chef oder Puppet, oder kann manuell eingestellt werden, mit der cloud-hosts wie Pagodabox und Heroku.
Die Sache, die ich nicht verstehe, ist, dass ich erhalten die folgende Ausnahme:
PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable.
Dies steht im Widerspruch mit dem, was die Dokumentation sagt, dass "die tatsächliche Umgebungsvariablen sollten gesetzt werden, so dass kein overhead für das laden der .env-Datei, die auf jede Anforderung."
Die Frage ist also, ob es irgendein Grund, warum dotenv wirft die exception und/oder bin ich etwas fehlt? Zunächst das Verhalten ist anders im Vergleich zu anderen dotenv Bibliotheken (ruby)
Kann ich leicht umgehen, die nicht so schöne Lösung:
if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
}
Schönste Lösung ist meiner Meinung nach, aber ich denke, dotenv sollten damit umgehen.
$dotenv = new Dotenv\Dotenv(__DIR__);
//Check if file exists the same way as dotenv does it
//See classes DotEnv\DotEnv and DotEnv\Loader
//$filePath = $dotenv->getFilePath(__DIR__);
//This method is protected so extract code from method (see below)
$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
//both calls are cached so (almost) no performance loss
if(is_file($filePath) && is_readable($filePath)) {
$dotenv->load();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dotenv wurde gebaut, um eine Idee herum, dass es verwendet wird, in Umgebungen der Entwicklung nur. Also, es erwartet immer
.env
- Datei vorhanden sein.Die Lösung, die Sie wusste nicht, wie ist der empfohlene Weg, um Dotenv. Und es scheint, dass es wird sich nicht ändern in Naher Zukunft. Eine entsprechende Diskussion im project-issue tracker: https://github.com/vlucas/phpdotenv/issues/63#issuecomment-74561880
Beachten Sie, dass Mark bietet es ein guter Ansatz für die Produktion/staging-Umgebungen, die überspringt das laden der Datei, aber nicht die Validierung
$dotenv->required()
es funktioniert keiner Weise, was schön ist. Diegetenv('APP_ENV');
sicherer ist, denke ich mal? Ich denke, ich gehe für den filecheck aufrufen, das wird gut für das aktuelle Projekt. Danke!getenv('APP_ENV')
ist sicherer?Wenn Sie problem haben, um erstellen Sie eine APP_ENV variable dieser code ist einfacher :
Schaute auch in diese, meine aktuelle Lösung ist die Verwendung Lumen ist Weg (Stand: 6. Juni 2016), die war vorgeschlagen, in einer Diskussion:
Können Sie immer noch einige zusätzliche exception-handling, falls erforderlich (z.B. Sturz auf die Standardwerte oder um eine Validierung.
DotEnv
überhaupt Rechenaufwand der laden der.env
- Datei bei jeder Anfrage, so Ihr Kommentar gilt eigentlich für die gesamte Prämisse der VerwendungDotEnv
, und nicht nur diese Antwort.