繁体   English   中英

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

[英]What is the best way to clear apc_cache when deploying a symfony project to an autoscaling application?

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

  • 如何确保在部署过程中所有dyno上都清除了apc_cache?

我在网上找到了一个在部署过程中清除apc_cache的技巧,该技巧需要向(临时)公开可用的php文件发出请求,以清除apc_cache。 我不明白如何使用多个dyno来可靠地工作,因为任何单个请求总是路由到仅一个dyno。 这完全是一个问题,因为我的服务器监视工具指示该应用程序在部署过程中暂时缩小为一个动态范围,在部署完成后又进行了缩放。

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

使用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的对象缓存仅在本地实例上存储信息,因此一旦您具有多个dyno(实例),它们将不会共享缓存。

为此,您可以考虑使用Memcached

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM