【问题标题】:Unable to use Apc cache within CakePHP shell无法在 CakePHP shell 中使用 Apc 缓存
【发布时间】:2017-06-27 05:55:17
【问题描述】:

所以我在尝试运行 shell 脚本时遇到了这个著名的错误(通过浏览器运行没有问题)

致命错误:未捕获的 CacheException:缓存引擎“默认”不是 正确配置。

默认指向Apc缓存。

Cache::config('default', array(
    'engine' => 'Apc',
    'prefix' => 'some_default',
    'duration' => '+1 hour'
));

堆栈跟踪:

#0 /.../lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('default')
#1 /.../app/Config/core.php(381): Cache::config('default', Array)
#2 /.../lib/Cake/Core/Configure.php(72): include('/home/...')
#3 /.../lib/Cake/bootstrap.php(432): Configure::bootstrap(true)
#4 /.../lib/Cake/Console/ShellDispatcher.php(145): require('/home/...')
#5 /.../lib/Cake/Console/ShellDispatcher.php(100): ShellDispatcher->_bootstrap()
#6 /.../lib/Cake/Console/ShellDispatcher.php(54): ShellDispatcher->_initEnvironment()
#7 /home/ in /.../lib/Cake/Cache/Cache.php on line 186

环境:

Apache/2.4.18 (Ubuntu)
PHP 7.0.13-0ubuntu0.16.04.1 (cli)
CakePHP v2.8.0

php -i | grep apc:

apc.coredump_unmap => Off => Off
apc.enable_cli => On => On
apc.enabled => On => On
apc.entries_hint => 4096 => 4096
apc.gc_ttl => 3600 => 3600
apc.mmap_file_mask => no value => no value
apc.preload_path => no value => no value
apc.serializer => php => php
apc.shm_segments => 1 => 1
apc.shm_size => 32M => 32M
apc.slam_defense => On => On
apc.smart => 0 => 0
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.writable => /tmp => /tmp

Cake tmp 文件夹 - 权限 777www-data 用户拥有(也运行 apache) tmp 包含 /cachetmp/cache/modelstmp/cache/persistenttmp/logs,与 tmp 具有相同的权限。

例如,如果我将默认引擎从 Apc 更改为 Redis,则一切正常。

【问题讨论】:

  • 我尽量做到具体一点,如果您知道更多信息可以帮助解决这个问题,请发表评论
  • 您确定您安装的是 APC,而不是 APCu?后者仅支持 CakePHP 2.8.5。
  • @ndm 是的,我已经安装了 APCu,但是为什么它可以在浏览器上运行,但不能在 shell 上运行?
  • @ndm 好的,我安装apcu-bc 是为了向后兼容php7.0,现在我摆脱了那个致命错误——只有警告default cache was unable to write 'key' to Apc cache,这仍然不能解决我的问题.. .
  • @ndm 我现在开始工作了,由于某种原因,在 cli/php.ini 中启用 apcu&apc 无效,当我在 cli/config.d/apcu.inicli/config.d/z_apc.ini 中放入相同的行时,它开始工作了!非常感谢您为我指明了方向!

标签: php shell cakephp caching cakephp-2.0


【解决方案1】:

Apc for php7.0 已弃用,因此您需要安装 apcu 而不是 apcu-bc - 以与 apc 兼容。

也许只是在我的情况下,但是当我输入 .../cli/php.ini 这些行时

extension=apcu.so
extension=apc.so

apcu.enabled=1
apc.enable_cli=1

Apc 仍然无法工作,我收到警告:

默认缓存无法将“密钥”写入 Apc 缓存

当我创建两个文件时它开始工作

.../cli/config.d/apcu.ini 其中包含:

extension=apcu.so

.../cli/config.d/z_apc.ini,其中包含:

extension=apc.so
apc.enable_cli=1

(z前缀是为了订单,apc应该在apcu之后加载)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多