将 Symfony2 应用程序部署到 Elastic Beanstalk 时,我需要执行手动缓存清除操作,以便应用程序开始运行。因此,我添加了一个容器命令来在部署期间清除产品缓存。命令运行,但我仍然必须手动清除才能使应用运行。
经过一番挖掘,我发现 Symfony2 缓存文件本身有绝对路径字符串。我添加的命令运行“预部署”或在应用程序文件从它们的暂存文件夹(称为“/var/app/ondeck”)移动到它们的最终存放位置(“/var/app/current”)之前运行。结果,缓存文件中的绝对路径字符串错误,导致应用无法加载。
此外,开发环境可以立即正常工作,因为它会自动重建自己的缓存。生产环境是唯一受影响的环境。
我的问题:
- 有没有办法在代码移动到位后自动运行缓存清除命令?
- 或者,有没有什么方法可以让 Symfony2 让您为缓存生成指定一个不同的“基本路径”?这样它就可以设置为指向正确的最终位置。
提前谢谢大家:-)
最佳答案
出现此问题是因为当各种 Symfony 命令在 composer 安装过程和/或您自己的命令(例如 assetic:dump)结束时运行时,缓存已填充到 ondeck 环境中。
解决方案是清除缓存作为部署的最后一个命令并指定--no-warmup来阻止Symfony自动重新填充它,这样当环境从移动时缓存为空ondeck 到 current。在我的 .ebextensions/symfony.config 我有:
container_commands:
01_migrate:
command: php app/console doctrine:migrations:migrate --env=prod --no-debug --no-interaction
leader_only: true
02_dumpassets:
command: php app/console assetic:dump --env=prod --no-debug
99_clearcache:
command: php app/console cache:clear --env=prod --no-debug --no-warmup
它没有很好的记录,但您也可以使用部署后 Hook 来预热缓存 after 环境已移动到当前。同样在 .ebextensions/symfony.config 中:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/01-cachewarm.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
cd $EB_CONFIG_APP_CURRENT
php app/console cache:warmup --env=prod --no-debug
关于php - 将 Symfony2 应用程序部署到 AWS Elastic Beanstalk - 部署后缓存清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14124246/