Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将symfony项目部署到自动缩放应用程序时,清除apc_缓存的最佳方法是什么?_Php_Symfony_Heroku_Amazon Ec2_Apc - Fatal编程技术网

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

Php 将symfony项目部署到自动缩放应用程序时,清除apc_缓存的最佳方法是什么?,php,symfony,heroku,amazon-ec2,apc,Php,Symfony,Heroku,Amazon Ec2,Apc,我在4 heroku dynos上运行symfony应用程序,我想使用apc_缓存 如何确保在部署期间清除所有Dyno上的apc_缓存 我在网上发现了一个在部署期间清除apc_缓存的技巧,它需要向(临时)公开的php文件发出请求,以清除apc_缓存。我不明白这将如何可靠地与多个dynos一起工作,因为任何单个请求总是只路由到其中一个dynos。这到底是不是一个问题,因为我的服务器监控工具表明,应用程序在部署期间会临时缩小到一个dyno,而在部署完成时会缩小到一个dyno 也许下面的问题本身就

我在4 heroku dynos上运行symfony应用程序,我想使用apc_缓存

  • 如何确保在部署期间清除所有Dyno上的apc_缓存
我在网上发现了一个在部署期间清除apc_缓存的技巧,它需要向(临时)公开的php文件发出请求,以清除apc_缓存。我不明白这将如何可靠地与多个dynos一起工作,因为任何单个请求总是只路由到其中一个dynos。这到底是不是一个问题,因为我的服务器监控工具表明,应用程序在部署期间会临时缩小到一个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 autoloader时,如果添加新类,将自动找到它们,所有操作都将与以前相同(即没有理由“清除”缓存)。但是,如果更改特定命名空间或前缀的位置,则需要刷新APC缓存。否则,自动加载程序仍将查看该命名空间内所有类的旧位置

您可以使用此捆绑包或将命令添加到安装后cmd

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

或者如果您使用Capifony:

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

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


这样,你可以在弹性豆茎(Amazon)中考虑<强> MycCase<强/> /P>,你可以编写部署YML文件,它可以运行BASH脚本、修改文件和任何你想要的东西。因此,在部署之后,您可以重新启动fpm,或者只是向localhost请求清除apc的隐藏文件。但是,我不知道从哪里开始测试。从PHP5.5开始,PHP内置了OPcache。对于旧版本,最广泛使用的字节码缓存可能是APCI为生产找到了一个opcache调整:我需要指定主机名的状态文档。我不能使用类似的东西,因为这将通过负载平衡器将请求路由到apc-*.php,只发送到其中一个dyno,对吗?

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