Laravel Environments

Notwendige Konfigurationen automatisch laden abhängig vom Namen des Hosts auf dem die Webapplication läuft? individuell auf jedem Host? Cool!

Update: Ein Blick in die Dokumentation zeigt, Laravel hat in Version 5.0 die Environments tüchtig aufgeräumt und aus meiner Sicht eleganter gelöst als zuvor.

Laravel 5.0

Wer auf unterschiedlichen Rechnern oder im Team entwickelt oder auf einer Produktions-Umgebung andere Einstellungen für Datenbank und Co. hat, wird um die Anpassung der Umgebungsvariablen nicht drum herum kommen. Gerade bei der Verteilung von Änderungen kann da gern mal etwas von den Einstellungen zerhauen.

Im Wurzelverzeichnis einer frischen Laravel 5 Installation findet man nun eine .env.example-Datei (wer über composer installiert sogar gleich über eine angepasste .env). Thats it… das ist die Hauptkonfigurationsdatei, in der alle Einstellungen ihren Platz finden, die genau einen Rechner betreffen.

Einen Blick in die .gitignore offenbart das Offensichtliche, die .env-Datei ist nicht für die Versionierung und somit auch nicht für das Deployment vorgesehen und muss so auf jedem Rechner / Server neu angelegt und modifiziert werden.

APP_ENV=local
APP_DEBUG=true
APP_KEY=XNq5U36Ff6APFkVUqKT3Qw1Lmm2DWGX7

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file</pre>

Besser noch, es können eigene Variablen deklariert und da sie in der PHP super-global $_ENV eingetragen sind, überall wieder abgerufen werden. Dies geschieht über die Methode

$environment = env('APP_ENV', 'production');

Dabei ist der zweite Parameter ein default-Wert, falls die .env fehlen sollte und kann z.B. für die Einstellungen in der Produktionsumgebung genutzt werden. Wobei der Weg über die .env eleganter ist, da sie an einem Ort und nicht über 20 Dateien verteilt zu finden sind.

Laravel 4.2

Alle Einstellungen die im config-Ordner vorgenommen werden, gelten für die „production“-Umgebung. Möchte man nun für die Datenbank oder die Authentifizierung auf seinem Entwicklungsrechner andere Angaben machen. Könnte man einfach auf jedem Rechner eine Datei vorhalten und bei der Übertragung einfach aufpassen das man diese nicht mit kopiert?!

Mit Laravel geht das eleganter, in der /bootstrap/start.php kann man neben der „production“-Umgebung noch weitere angegeben. Und besser noch, man gibt an für welche Hosts diese dann gelten sollen. Unter /app/config/ legt man nun einen gleichnamigen Ordner an, z.B. „local“ und packt dort alle Einstellungsdateien aus dem Hauptverzeichnis rein, welche man überschreiben möchte. Es müssen nur die Werte angegeben werden, die man überschreiben möchte.

Um z.B. die Einstellungen debug und url zu ändern, könnte die /app/config/local/app.php so aussehen:

<?php

return array(
    'debug' => true,
    'url' => 'http://localhost',
);

Übrigens den Hostnamen bekommt man wieder über die Windows Konsole heraus, starten mit Win+R und cmd eintippen. Dann einfach hostname eintippen und mit Enter bestätigen.

Ein Gedanke zu „Laravel Environments“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.