Frage

Was kann ich von der Produktion zum Schalter ändern .. etc zu inszenieren .. und wo .. Bootstrap?

Auch neugierig, ob jemand automatisch ihre Zend Framework konfiguriert Umschalten von Produktion, Inszenierung, Test .. etc basierend auf Host-Informationen ..

Beispiel ..

 if (hostname = 'prodServer') ... blah
 if (hostname = 'testServer') ... blah

Ich bin neu in Zend aber ich konfigurieren normalerweise meine Projekte automatisch Schalter Ablaufumgebungen basierend auf den Host-Informationen.

Dank

War es hilfreich?

Lösung

Unter der Annahme, dass Sie APPLICATION_ENV als Teil Zend_Application verwenden, dann Sie diese entweder in der .htaccess oder Haupt Apache Config hinzufügen könnten. (Vorausgesetzt, Apache im Einsatz ist - nach wie vor möglich, auch mit anderen Webservern sein sollte)

Zum Beispiel in der .htaccess / config (übernimmt mod_setenv):

SetEnvIf HTTP_HOST abc.example.com APPLICATION_ENV=production
SetEnvIf HTTP_HOST def.example.com APPLICATION_ENV=staging 
SetEnvIf HTTP_HOST ghi.example.com APPLICATION_ENV=development

Dann sicherstellen, dass APPLICATION_ENV in index.php gesetzt wird durch die Verwendung:

// Define application environment
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

Dies wird durch Zend_Tool hinzugefügt, wenn Sie es verwenden, um das Projekt zu erzeugen.

Andere Tipps

Diese Arbeit für mich in .htaccess

SetEnvIf Host dev.mydomain.ca APPLICATION_ENV=development
SetEnvIf Host mydomain.ca APPLICATION_ENV=production
SetEnvIf Host mydomain.localhost APPLICATION_ENV=production

Da ist in meinem application.ini

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
; Database for development 
resources.db.params.dbname = "mydabase-dev"

Wir definieren eine Umgebungsvariable (ENVPHP), und verwenden Sie dies in unseren XML-Konfigurationsdateien, so dass die richtigen DB-Parameter geladen werden, solange Sie die richtige ENVPHP Umgebungsvariablen definieren. XML verwenden, können Sie verlängern (oder überschreiben) Ihre gemeinsame Parameter mit denen für die spezifischen Umgebungen.

dh. Die Konfiguration sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<application>
    <common>
        <name>MyApp_name</name>
        <code>MyApp_code</code>
        <version>MyApp_version</version>
        <authentication>
            ... authentication specific parameters (ie. LDAP connection parameters)
        </authentication>
        ...
    </common>
    <dev extends="common">
        <database>
            ... DB connection parameters for development
        </database>
        ...
    </dev>
    <tst extends="common">
        <database>
            ... DB connection parameters for test
        </database>
        ...
    </tst>
    <prd extends="common">
        <database>
            ... DB connection parameters for production
        </database>
        ...
    </prd>
</application>

Und die Konfiguration zu laden, ich habe in meinem Bootstrap die folgenden (na ja, eigentlich in einer Anwendung Singletonklasse):

public static function getEnv()
{
    if (self::$env === null) {
        self::$env = getenv('ENVPHP');
    } else {
        return self::$env;
    }
}

protected function initConfig ()
{
    $configFile = $this->appDir . '/config/application.xml';
    if (! is_readable($configFile)) {
        throw new Application_Exception('Config file "' . $configFile . '" is not readable');
    }
    if (false === self::getEnv()) {
        throw new Application_Exception('The environment variable "ENVPHP" is not defined');
    }
    $config = new Zend_Config_Xml($configFile, self::getEnv(), true);
    $config->setReadOnly();

    Zend_Registry::set('config', $config);
    $this->config = $config;
}

In PHP-Code, wenn ich einige Dinge tun will nur für bestimmte Umgebungen dann verwende ich Anwendung :: GETENV (), was Umwelt zu überprüfen, ich bin in und führen Sie den Code, den ich nach will es.

BTW Die ENVPHP Umgebungsvariable kann in der Apache-Konfigurationsdatei dh eingestellt werden. SetEnv ENVPHP "dev" innerhalb Ihrer Virtualhost-Container. Für CLI PHP-Skripte Sie es als OS-Umgebungsvariable sollte ...

Der beste Weg, die ich sehe, ist:

index.php - production
index_dev.php - dev, index_dev.php/controller/action

Ich habe auch versucht, Host namens configs Dateien:

base.ini - base config
localhost.ini - dev config
prod.host.com.ini - prod config

aber der erste Ansatz ist viel besser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top