6

プロダクションからステージングに切り替えるには何を変更すればよいですか?

また、ホスト情報に基づいて本番環境、ステージング環境、テスト環境などから自動的に切り替えるように Zend Framework を構成した人がいる場合は興味深い..

例..

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

私は Zend を初めて使用しますが、通常、ホスト情報に基づいて実行環境を自動的に切り替えるようにプロジェクトを構成します。

ありがとう

4

4 に答える 4

16

Zend_Applicationの一部としてAPPLICATION_ENVを使用していると仮定すると、これを.htaccessまたはメインのApache構成のいずれかに追加できます(Apacheが使用されていると仮定すると、さまざまなWebサーバーでも可能です)。

たとえば、.htaccess / config(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

次に、以下を使用して、APPLICATION_ENVがindex.phpに設定されていることを確認します。

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

これは、プロジェクトの生成に使用する場合、Zend_Toolによって追加されます。

于 2010-03-26T09:00:37.277 に答える
4

それは.htaccessで私のために働きます

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

次に、私の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"
于 2011-06-30T20:15:02.603 に答える
1

環境変数 (ENVPHP) を定義し、これを XML 構成ファイルで使用するため、正しい ENVPHP 環境変数を定義する限り、正しい DB パラメータがロードされます。XML を使用すると、共通のパラメーターを特定の環境用のパラメーターで拡張 (またはオーバーライド) できます。

すなわち。構成は次のようになります。

<?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>

そして、構成をロードするために、ブートストラップに次のものがあります(実際にはアプリケーションシングルトンクラスにあります):

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;
}

PHPコードでは、特定の環境に対してのみ何かをしたい場合は、 Application::getEnv() を使用して現在の環境を確認し、それに応じて必要なコードを実行します。

ところで、ENVPHP 環境変数は、ie を使用して Apache 構成ファイルで設定できます。SetEnv ENVPHP "dev"VirtualHost コンテナー内。CLI PHPスクリプトの場合、OS環境変数として設定する必要があります...

于 2010-03-26T11:57:25.633 に答える
0

私が見た最良の方法は次のとおりです。

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

ホスト名の構成ファイルも試しました:

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

しかし、最初のアプローチの方がはるかに優れています。

于 2010-03-26T08:26:38.250 に答える