スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

yii-environmentを使う

Yiiフレームワークには、開発環境と本番環境の設定を切り分ける仕組みがありません。
それだといちいち参考演算子を使って設定することになっちゃいます。

'connectionString' => YII_DEBUG ? 'pgsql:host=localhost;port=5432;dbname=development' : 'pgsql:host=localhost;port=5432;dbname=production'

これだと悲しいので、拡張機能のyii-environmentを使って切りわけるようにしてみます。
yii-environmentはconfig/main.phpに共通の設定を書いて、環境ごとに変わる値はconfig/mode_[環境名].phpに書きます。私の場合config/main.phpにproductionの設定を書いて、config/mode_development.phpに開発環境の設定を書き、config/mode_production.phpには何も書かないようにしています。

設定にはPostgreSQLのDB設定とdirectmongosuiteを使ったMongoDBの設定を記述してあります。
アプリケーションのデータはPostgreSQLに保存して、ログ、セッション、権限管理はMongoDBに保存するようにしています。

ではまずWebアプリケーションを作ります。
yiic webapp test

ファイルが生成されたら、production/extensionsに
yii-environmentdirectmongosuiteをおきます。

次に以下のようにファイルを修正してください。

index.php
<?php
// common functions
require_once(dirname(__FILE__).'/protected/config/global.php');
// set environment
require_once(dirname(__FILE__) . '/protected/extensions/yii-environment/Environment.php');
$env = new Environment();

// set debug and trace level
defined('YII_DEBUG') or define('YII_DEBUG', $env->yiiDebug);
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', $env->yiiTraceLevel);

// run Yii app
//$env->showDebug(); // show produced environment configuration
require_once($env->yiiPath);
$env->runYiiStatics(); // like Yii::setPathOfAlias()
Yii::createWebApplication($env->configWeb)->run();


protected/config/main.php
<?php
return [
// Set yiiPath (relative to Environment.php)
'yiiPath' => '/opt/yii/framework/yii.php',
'yiicPath' => '/opt/yii/framework/yiic.php',
'yiitPath' => '/opt/yii/framework/yiit.php',

// Set YII_DEBUG and YII_TRACE_LEVEL flags
'yiiDebug' => false,
'yiiTraceLevel' => 0,

// Static function Yii::setPathOfAlias()
'yiiSetPathOfAlias' => [
// uncomment the following to define a path alias
//'local' => 'path/to/local-folder'
],

// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
'configWeb' => [
'basePath' => dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name' => 'My Web Application',

// preloading 'log' component
'preload' => ['log'],

// autoloading model and component classes
'import' => [
'application.models.*',
'application.components.*',
'ext.directmongosuite.components.*',
],

'behaviors' => [
'edms' => [
'class'=>'EDMSBehavior',
],
],

'modules' => [
],

// application components
'components' => [
'user' => [
// enable cookie-based authentication
'allowAutoLogin' => true,
],
'edms' => [
'class' => 'EDMSConnection',
'dbName' => 'test',
],
'session' => [
'class' => 'EDMSHttpSession',
'collectionName' => 'session',
],
'db' => [
'connectionString' => 'pgsql:host=localhost;port=5432;dbname=test',
'username' => 'username',
'password' => 'password',
],
'errorHandler' => [
// use 'site/error' action to display errors
'errorAction'=>'site/error',
],
'log' => [
'class' => 'CLogRouter',
'routes' => [
[
'class' => 'EDMSLogRoute',
'levels' => 'trace, info, error, warning, edms',
'collectionName' => 'syslog',
],
],
],
'authManager' => [
'class' => 'EDMSAuthManager',
'authFile' => 'authmanager',
'defaultRoles' => ['admin', 'member', 'normal', 'guest'],
]
],
// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params' => [
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
],
],
];

protected/config/mode_development.php
<?php
return [
'yiiDebug' => true,
'yiiTraceLevel' => 3,
'configWeb' => [
'modules' => [
'gii' => [
'class' => 'system.gii.GiiModule',
'password' => false,
],
],
'components' => [
],
],
];

protected/config/mode_production.php
<?php
return [
];

最後に環境の設定を行います。nginxなら以下の通りです。
location ~ \.php$ {
try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
fastcgi_param YII_ENVIRONMENT "development";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass phpfpm;
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。