2010/01/08 10:33:36 [error] 18644#0: *9649 FastCGI sent in stderr: "PHP Fatal error: Uncaught exception ‘CException’ with message ’
Application base path “/var/www/myproject/webapp/protected” is not a valid directory.’ in /var/www/framework/base/CApplication.php:211
Stack trace:
#0 /var/www/framework/base/CApplication.php(103): CApplication->setBasePath(’/var/www/myproject…’)
#1 /var/www/framework/YiiBase.php(112): CApplication->__construct(’/var/www/myproject…’)
#2 /var/www/framework/YiiBase.php(85): YiiBase::createApplication(‘CWebApplication’, ‘/var/www/myproject…’)
#3 /var/www/myproject/webapp/index.php(11): YiiBase::createWebApplication(’/var/www/myproject…’)
#4 {main}
thrown in /var/www/framework/base/CApplication.php on line 211" while reading response header from upstream, client: 114.80.164.20
2, server: ****.com, request: "GET /item/productlist HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "*****.com",
referrer: "http://www.*****.com/item"
测试中没发现这种报错,部署真实环境后就会时断时续地报这种路径无效,修改Yii的代码,跟踪过,如下:
public function setBasePath($path)
{
if(($this->_basePath=realpath($path))===false || !is_dir($this->_basePath))
throw new CException(Yii::t('yii','Application base path "{path}" is not a valid directory._basePath:{path2}xx:{hello}',array('{path}'=>$path,'{path2}'=>$this->_basePath,'{hello}'=>'helloWorld')));
}
结果打印出来,path有值,_basePath为空,hello可以打印出helloWorld,也就是说,简单的赋值不行了!
$this->_basePath = realpath($path)这句话执行以后,_basePath仍为空(也跟踪过realpath($path),正常有值)
用到的Yii版本:Yii1.1,环境为nginx0.7.64,php-fpm0.6 with php5.3.1
php-fpm配置max_children为5时,很容易出现上述错误,当然不是一直出现,就是所有页面点点都有可能挂掉,但很不确定。提高max_children为128时,不容易出现上述错误,但也会有。
感觉是Yii的某种缓存机制,缓存的东西超出资源上限,php-fpm的某些子进程就挂了,不能正常工作,所以什么页面都可能出错,但也不是每次都出错。
程序中并没有用到cache,无论是APC还是memcached。请教达人,有什么办法继续跟踪?有没有什么推测?
现在正在换apache环境,看看是不是nginx+php-fpm的问题,郁闷……