2013-12-18 9 views
11

In Laravel 4 ist die Standardkonfigurationsumgebung "Produktion". Wenn Sie also einen Handwerkerbefehl ohne die Option --env ausführen, wird die Produktionskonfiguration angenommen. Dies kann in \Illuminate\Foundation\Application::detectWebEnvironment() gesehen werden, die von detectConsoleEnvironment() aufgerufen wird, wenn keine --env Option festgelegt ist.Ändern der Standardumgebung in Laravel 4

Dieses Verhalten ist zu einem Risiko für meine Entwicklungsumgebung geworden. Es ist sehr einfach, die Option --env zu vergessen und beispielsweise unbeabsichtigt eine Migration in Ihrer Produktionsdatenbank auszuführen. (Ja, das passierte, aber zum Glück war es eine kleine Änderung.) Ich bin kurz davor, meine Produktionsumgebungskonfiguration in "echte Produktion" umzubenennen, aber es scheint, dass es eine elegantere Lösung geben sollte.

TL; DR

Wie kann ich die Standardumgebung in Laravel 4 so zu ändern, dass Handwerker Befehle auf die Produktion laufen nicht standardmäßig?

+0

Ich denke, [diese Antwort] [1] ist das, was Sie suchen, ... [1]: http://stackoverflow.com/a/19739750/1272001 – clod986

+0

ich weiß nicht, Ihre Setup, aber in general dev, staging und production sollten nicht in der Lage sein, sich gegenseitig zu erreichen Umgebungsvariablen, was bedeutet, was Sie getan haben, wäre nicht möglich. Es ist vielmehr sicherer, eine Produktion als Standard zu haben, da Entwicklungsumgebungen möglicherweise vertrauliche Informationen, beispielsweise in Fehlermeldungen, verlieren. Laravel hat eine Dokumentation darüber hier: http://laravel.com/docs/configuration#protecting-sensitive-configuration –

Antwort

12

Dank Antonio zum Veran Ich überdenke die Domain-Erkennung.

$env = $app->detectEnvironment(array(
(
    // Empty string is to set development as the default environment for 
    // artisan commands. 
    'development' => array('dev.foo.com', ''), 
    'test' => array('test.foo.com'), 
    'production' => array('www.foo.com', 'foo.com'), 
)); 

‚Hinzufügen‘ als Entwicklungs Domain Entwicklung als die Standardumgebung für Handwerker Befehle effektiv setzt, vermutlich weil der Domainname leer ist, wenn die Anwendung über die Befehlszeile aufgerufen. Ich habe getestet und es scheint alles == false wird funktionieren. Ich habe auch überprüft, dass dies die Erkennung der Produktions- oder Testumgebungen nicht beeinträchtigt.

+6

Seit der Veröffentlichung von Laravel 4.1 Domain-Erkennung ist nicht mehr möglich für die Entscheidung Umgebung, was bedeutet, dass diese Antwort nicht mehr funktioniert. http://laravel.com/docs/upgrade#upgrade-4.1 –

+0

Es ist möglich, Sie müssen es nur manuell tun (im Gegensatz zu 'detectEnvironment'). Es wird jedoch nicht empfohlen, da einige dieser PHP-Globals in einigen Fällen gefälscht werden können (abhängig von Ihrer Serverkonfiguration). Die Verwendung von 'hostname' ist etwas albern für diejenigen von uns, die auf vielen Servern mit unterschiedlichen Hostnamen (wie EC2) laufen. – Tom

9

In Bootstrap/start.php Sie die Umgebung einstellen:

$env = $app->detectEnvironment(function() 
{ 

    return 'development'; 

}); 

Sie können aber wie viele Dinge tun:

$env = $app->detectEnvironment(array(

    'local' => array('your-machine-name'), 

)); 

Und

$env = $app->detectEnvironment(function() 
{ 
    return $_SERVER['MY_LARAVEL_ENV']; 
}); 
+0

Ich bin mir dessen bewusst und benutze die zweite Methode, um die Domain anzupassen. Das gibt mir eine gute Idee und ... ja. Die Einstellung 'Entwicklung' => Array ('') setzt die 'Entwicklung' effektiv als Standardumgebung für Handwerker ein. Ich habe überprüft und dies beeinträchtigt nicht die normale Erkennung der Umgebung durch die Domäne. –

0

In Laravel 4.2 Sie werden nicht destruktiv Handwerker-Migrationen tun können, ohne gefragt zu werden:

Destructive Migrationsvorgänge erfordern nun eine Bestätigung oder --force, wenn in der Produktion führen wird.

Change log for 4.2 is here

2

Einer der eleganteste Lösung, die ich gefunden habe, ist aus diesem Blog-Eintrag: http://stevegrunwell.com/blog/laravel-application-environment/

Die Vorteile:

  1. Keine Notwendigkeit, eine Reihe von hart codiert Entwicklungsmaschinen in eine Git-Commit-Datei start.php.
  2. Fallback auf Server-Umgebungsvariablen in der Produktion.
  3. Einfache persistente lokale Entwicklungsumgebung durch Ändern der Datei environment.php.
1
$env = $app->detectEnvironment(array(

     'staging' => array('baichebao_test'), 
     'local' => array('*.local', '*'), 
)); 

wie mein Beispiel, legen Sie Ihre Standardumgebung in dem letzten Element des Arrays, und fügen Sie „*“, um es der Manager Host-Namen. und es funktioniert in Laravel 4.X

3

können Sie versuchen, App/start.php-Datei ändern zweite Parameter auf gewünschte Umgebung als TRUE dh hinzufügen lokale Umgebung zu ermöglichen, es sieht aus wie

$env = $app->detectEnvironment(array(

    'local' => array('homestead',true), 

));