在coding上部署Yii1.x应用

2014年12月5日 · 90 字 · 1 分钟

总的来说,由于没有成熟的资料可以参考,部署过程话费了将近一个小时才成功,现在来分享一下经验。

目录配置

由于Paas禁止了本地写功能,所以,如果不加任何处理的话,Yii会尝试在 protected/runtime 目录下写私有文件,结果是肯定没权限的。

经过查找官方文档发现CApplication有个方法叫setRuntimePath,可以设置运行时目录,那么最重要的一点,这个目录的配置肯定要在入口文件中配置,更改之后的入口文件代码如下:

defined('YII_DEBUG') or define('YII_DEBUG',false);
if(isset($_GET['_d']))
    setcookie('_d',1,7*25*3600);
// change the following paths if necessary
$yii=dirname(__FILE__).'/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';


// remove the following lines when in production mode
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

require_once($yii);
$app = Yii::createWebApplication($config);
$app->setRuntimePath('/home/vcap/fs/*****');
$app->run();

可以看到,倒数一二行,重新设置了 runtimepath,所以,第一个问题解决。

数据库配置

数据库这边没什么好说的,自己更改下连接信息就可以了。

缓存配置

本地开发采用的缓存,默认是File的,如果你解决了上一个问题之后,在线上,缓存是没有问题了,这里探讨下服务器缓存的设置(Coding.NET提供的缓存为Redis的,PHP操作Redis需要扩展,这里先不探讨),本站现在的缓存驱动为DB方法,配置方法为:

'cache' => array(
  'class' => 'system.caching.CDbCache',
  'connectionID' => 'db',
  'cacheTableName'=>'t_cache'
),

日志配置

默认情况下,日志是写入runtime path的,不过在Paas上,我们一般是没有本地文件权限的,就算写入了,查看起来比较麻烦,这里也采用数据库方法记录:

'log' => array('class' => 'CLogRouter',
'routes' => array(
    array('class'=>'CDbLogRoute',
    'connectionID'=>'db',
    'logTableName'=>'t_log')
))

总结

经过以上处理,大家应该发现很多任务都交给数据库了,连缓存也是,缓存不就是为了减少直接从数据库读取数据吗,为什么还要用数据库缓存呢?

这里本人简单分析下(仅代表本人观点)

WEB应用程序的瓶颈在于数据库,比如InnoDB方法进行事务操作时,会锁行,或者锁表,这样下一个请求对同一条记录进行事务操作时会有“锁等待”,会浪费大部分的时间。还有一种是复杂的大数据查询,就算做了很多优化,查询速度依旧不快,毕竟连表的开销很大。

而数据库缓存的核心就是,数据只需要一次单表查询即可,没有连表,没有加锁,这个速度还是很快的。所以数据库缓存的存在性就是在此。