外部公開ディレクトリ webroot
内部非公開ディレクトリ protected
の2ディレクトリにまとめて、この2ディレクトリが同じ階層になる構成にしておくと便利。
webrootは、直接document rootとしてマウントしておく。
protectedは、document rootではないので、セキュリティ的に安心。
※webrootとprotectedが同階層にない構成にする場合、
webroot/index.php
webroot/index-test.php
の2ファイルからbasic.phpを読み込む部分だけ修正が必要。
通常運用の場合(テスト以外の箇所の設定)
具体的な設定は、まず
protected/config/main.php
は
function _joinpath($dir1, $dir2) {
return realpath($dir1 . '/' . $dir2);
}
$homePath = dirname(__FILE__) . '/../..';
$protectedPath = _joinpath($homePath, 'protected');
$runtimePath = _joinpath($protectedPath, 'runtime');
return array(
'basePath'=>$protectedPath,
'runtimePath' => $runtimePath,
...
という形に。
次に、起動ファイルについて。共通する部分を
protected/config/basic.php
に外出しして、そこにyiiフレームワークのディレクトリを設定しておく。
<?php
define('YII_FRAMEWORK' , '/home/myaccount/workspace/yii_proj/yii/framework');
?>
エントリースクリプト
webroot/index.php
では、このbasic.phpを読み込んで、以下のようにする
require_once(dirname(__FILE__).'/../protected/config/basic.php');
$yii=YII_FRAMEWORK . "/yii.php";
$config=dirname(__FILE__).'/../protected/config/main.php';
...
コマンドラインスクリプト
protected/yiic.php
も同様に、以下のようにする
require_once(dirname(__FILE__).'/config/basic.php');
$yiic=YII_FRAMEWORK . "/yiic.php";
$config=dirname(__FILE__).'/config/console.php';
,,,
テストを考えないのであれば、ここまででOK。
basic.phpは、この段階ではindex.phpからしか読み込まれないけど、設定ファイルは
config以下にまとめたほうがよいので、これで良しとする。
テスト用の設定
上記に加えて、さらに以下が必要。
機能テスト用のエントリースクリプト
webroot/index-test.php
は
require_once(dirname(__FILE__).'/../protected/config/basic.php');
$yii=YII_FRAMEWORK . "/yii.php";
$config=dirname(__FILE__).'/../protected/config/test.php';
...
これは、index.phpと共通のbasic.phpを読み込むことで設定しているため、環境が違う
場合でも、basic.phpを管理すればOK。
そのほか、単体テスト/機能テスト共通の、テスト用ブーストラップスクリプト
protected/tests/bootstrap.php
の設定ファイルも
require_once(dirname(__FILE__).'/../config/basic.php');
$yiit=YII_FRAMEWORK . "/yiit.php";
$config=dirname(__FILE__).'/../config/test.php';
これも、basic.phpを読み込んで設定するようにしてあるので、環境が違う場合でも、
basic.phpを管理すればOK。
機能テストで必要な、さらなる設定
ここまでは、環境ごとの違いは、すべてbasic.phpを管理することで対応できた。
しかしながら、機能テストについては、さらに環境依存で設定が必要なファイルが2つある。
(なお、蛇足だが機能テストの実行には、サーバー側にSelenium RC/Serverが必要)
protected/tests/WebTestCase.php
これは、サーバー上で機能テスト用のエントリースクリプトにhttpでアクセスする
ためのURLを記述しておく必要がある。環境依存なので注意。
webrootを直接document rootにしておいて、かつ、localhostでアクセス出来るのなら、
次のように記述する。
define('TEST_BASE_URL','http://localhost/index-test.php/');
また、機能テストで使用するブラウザは、
protected/tests/phpunit.xml
に記述してある。サーバ側にIEがインストールされていない場合は、IEの部分をコメント
アウトしておくこと。
<selenium>
<!-- <browser name="Internet Explorer" browser="*iexplore" /> -->
<browser name="Firefox" browser="*firefox" />
</selenium>
2013/08/30
2013/10/10 追記
最終更新:2013年10月10日 17:59