somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Zendframework】環境を分ける

前回の【apache】環境変数を設定するを利用して、環境を分けます。

なぜ分けるのか?

自分の場合は、Zendframeworkで開発したアプリをcloudcontrolに公開するためです。詳細を述べるとデータベースの設定がデプロイIDなどで構成されているためです。普通に開発していた場合、わかりやすい名前、アプリに関連する名前をつけるので、デプロイ先名前が異なります。

APPLICATION_ENV

環境を分けるためには、APPLICATION_ENVを設定する必要があります。この値は、フロントコントローラーindex.php内で使用されています。以下、index.phpより抜粋です。

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

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

定数APPLICATION_ENVをZend_Application作成時に使用し、この環境に対応する設定が使用されます。

定数APPLICATION_ENVは、定義されていればその値となります。、定義されていない場合は、環境変数APPLICATION_ENVの値を、環境変数が無い場合はproductionとなります。

つまり、なにも設定を行っていない場合、productionになります。productionは、本番環境で使用するので、プログラムソース変更なしでdeployできるようにしておけばいいと思います。

その代わり、開発環境やテスト環境では環境変数を設定しておきます。プログラムソースを変更しないためにも、apachehttpd.confのディレクトリディレクティブに記述することがいいと思います。.htaccessを推奨しない理由は、deployするプログラムソースに含まれることが多いためです。

application.iniと環境変数の設定

application.iniは以下のようになっていると思います。

[production]
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
・・・
resources.db.adapter               = "pdo_mysql"
resources.db.params.host           = "127.0.0.1"
resources.db.params.username       = "production"
resources.db.params.password       = "production"
resources.db.params.dbname         = "production"
・・・
[development : production]
resources.db.params.username       = "development"
resources.db.params.password       = "development"
resources.db.params.dbname         = "development"
・・・

何もしなければproduction、環境変数APPLICATION_ENVをdevelopmentにしていれば、productionの設定を継承したdevelopmentとなります。

developmentにするために、httpd.confに下記の記述を追加します。

Alias /alias "PATH"
<Directory  "PATH">
  SetEnv APPLICATION_ENV development
</Directory>

apache再起動後、これで開発環境では開発環境のDBを見ることができると思います。