在将symfony项目部署到自动扩展应用程序时清除apc_cache的最佳方法是什么?

时间:2015-11-18 10:34:11

标签: php symfony heroku amazon-ec2 apc

我在4个heroku dynos上运行symfony应用程序,我想使用apc_cache。

  • 如何确保在部署期间在所有dynos上清除apc_cache?

我在网上找到了一个清除apc_cache的技巧,需要向一个(临时)公开的php文件发出请求,清除apc_cache。我不明白这对于多个dynos是如何可靠地工作的,因为任何一个请求总是只被路由到一个dynos。这是一个问题,因为我的服务器监控工具表明应用程序在部署期间暂时缩小为一个dyno,以便在部署完成时进行扩展。

可能以下问题应该是一个问题,但我计划在不久的将来将应用程序迁移到Amazon EC2,并使用Codeship,Docker和AWS Elastic Beanstalk(EB)自动部署。对于在自动缩放组中使用Amazon EC2实例的问题,是否有更直接的解决方案?

1 个答案:

答案 0 :(得分:0)

使用APC缓存自动加载器(在Symfony文档中找到)

Symfony带有一个类 - ApcClassLoader - 就是这样做的。要使用它,只需调整前端控制器文件即可。如果您正在使用标准分配,则此代码应该已作为此文件中的注释提供:

// app.php
// ...

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';

// Use APC for autoloading to improve performance
// Change 'sf2' by the prefix you want in order
// to prevent key conflict with another application
/*
$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);
*/

// ...

注意:使用APC自动加载器时,如果添加新类,它们将自动找到,一切都将像以前一样工作(即没有理由"清除"缓存)。但是,如果更改特定命名空间或前缀的位置,则需要刷新APC缓存。否则,自动加载器仍将查看该命名空间内所有类的旧位置。

您可以使用此捆绑包https://github.com/ornicar/ApcBundlehttps://github.com/Smart-Core/AcceleratorCacheBundle并将命令添加到post-install-cmd

清除所有APC缓存(操作码+用户):

  $ php app/console apc:clear

或者如果你使用Capifony:

after "deploy", "symfony:clear_accelerator_cache"
after "deploy:rollback:cleanup", "symfony:clear_accelerator_cache"

已编辑:

但是,APC的对象缓存仅存储有关本地实例的信息,因此一旦你有多个dynos(实例),他们就不会共享缓存。

为此,您可以考虑 Memcached