我正在尝试为我的Codigniter应用程序设置cron作业,但是当我运行cron时,它会抛出memcached错误:
PHP致命错误:在第50行的/var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php中调用非对象的成员函数get()
致命错误:在第50行的/var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php中调用非对象的成员函数get()
虽然我不知道为什么这一直在抛出,我找不到我的cron作业文件中的任何错误,也不知道如何解决这个问题,因为我不知道这个被调用的地方,我查看了我的自动加载的库和助手,他们似乎没有错.
我也可以确认已安装memcached,如果我访问我的网站,memcached确实有效.
我试图抑制get()
在Cached_memcached.php
用@
,但这并没有帮助,因为没有显示输出(但应该是显示输出).
我为cron(user :)运行的命令www-data
是:
/usr/bin/php -q /var/www/domain.com/www/dev/index.php cron run cron
我正在运行Ubuntu 11.10 x86_64.
这是我的cron文件:
input->is_cli_request()) { if(isset($mode) || !empty($mode)) { if(in_array($mode, $this->current_cron_tasks)) { $this->benchmark->mark('cron_start'); if($mode == 'cron') { if($this->cache->memcached->get('currency_cache')) { if($this->cache->memcached->delete('currency_cache')) { $this->load->library('convert'); $this->convert->get_cache(true); } } echo $mode . ' executed successfully'; } $this->benchmark->mark('cron_end'); $elapsed_time = $this->benchmark->elapsed_time('cron_start', 'cron_end'); echo $elapsed_time; } } } } }
Ben Swinburn.. 9
首先要尝试的是确定是否支持memcached.
var_dump($this->cache->memcached->is_supported());
要确保的第二件事是你有一个memcached.php
文件application/config/
它应包含具有以下键的memcached主机的多维数组:
host
port
weight
以下示例定义了两个服务器.数组键server_1
和server_2
是不相关的,不过,可以命名.
$config = array( 'server_1' => array( 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 1 ), 'server_2' => array( 'host' => '127.0.0.2', 'port' => 11211, 'weight' => 1 ) );
接下来我要检查的是检查控制器是否可以在Web浏览器中运行而不是CLI,或者是否出现相同的错误.
此外,显式加载memcached驱动程序可能值得尝试.以下将加载memcached
驱动程序,并在file
缓存驱动程序上调用失败.
$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'file'));
使用此方法可以调用$this->cache->get();
以考虑回退.
要检查的另一件事是你没有为web和CLI使用单独的php.ini文件.
在Ubuntu它位于
/etc/php5/cli/php.ini
并且您应该确保存在以下行,而不是注释掉
extension=memcache.so
或者,您可以创建/etc/php5/cond.d/memcache.ini
具有相同内容的文件.
更改配置文件后,请不要忘记重新启动服务.
您可以通过执行以下命令检查memcached是否已使用CLI确实正确设置
php -i | grep memcache
首先要尝试的是确定是否支持memcached.
var_dump($this->cache->memcached->is_supported());
要确保的第二件事是你有一个memcached.php
文件application/config/
它应包含具有以下键的memcached主机的多维数组:
host
port
weight
以下示例定义了两个服务器.数组键server_1
和server_2
是不相关的,不过,可以命名.
$config = array( 'server_1' => array( 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 1 ), 'server_2' => array( 'host' => '127.0.0.2', 'port' => 11211, 'weight' => 1 ) );
接下来我要检查的是检查控制器是否可以在Web浏览器中运行而不是CLI,或者是否出现相同的错误.
此外,显式加载memcached驱动程序可能值得尝试.以下将加载memcached
驱动程序,并在file
缓存驱动程序上调用失败.
$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'file'));
使用此方法可以调用$this->cache->get();
以考虑回退.
要检查的另一件事是你没有为web和CLI使用单独的php.ini文件.
在Ubuntu它位于
/etc/php5/cli/php.ini
并且您应该确保存在以下行,而不是注释掉
extension=memcache.so
或者,您可以创建/etc/php5/cond.d/memcache.ini
具有相同内容的文件.
更改配置文件后,请不要忘记重新启动服务.
您可以通过执行以下命令检查memcached是否已使用CLI确实正确设置
php -i | grep memcache