gpt4 book ai didi

php - 将 Symfony2 应用程序部署到 AWS Elastic Beanstalk - 部署后缓存清除

转载 作者:IT王子 更新时间:2023-10-29 00:18:05 29 4
gpt4 key购买 nike

将 Symfony2 应用程序部署到 Elastic Beanstalk 时,我需要执行手动缓存清除操作,以便应用程序开始运行。因此,我添加了一个容器命令来在部署期间清除产品缓存。命令运行,但我仍然必须手动清除才能使应用运行。

经过一番挖掘,我发现 Symfony2 缓存文件本身有绝对路径字符串。我添加的命令运行“预部署”或在应用程序文件从它们的暂存文件夹(称为“/var/app/ondeck”)移动到它们的最终存放位置(“/var/app/current”)之前运行。结果,缓存文件中的绝对路径字符串错误,导致应用无法加载。

此外,开发环境可以立即正常工作,因为它会自动重建自己的缓存。生产环境是唯一受影响的环境。

我的问题:

  • 有没有办法在代码移动到位后自动运行缓存清除命令?
  • 或者,有没有什么方法可以让 Symfony2 让您为缓存生成指定一个不同的“基本路径”?这样它就可以设置为指向正确的最终位置。

提前谢谢大家:-)

最佳答案

出现此问题是因为当各种 Symfony 命令在 composer 安装过程和/或您自己的命令(例如 assetic:dump)结束时运行时,缓存已填充到 ondeck 环境中。

解决方案是清除缓存作为部署的最后一个命令并指定--no-warmup来阻止Symfony自动重新填充它,这样当环境从移动时缓存为空ondeckcurrent。在我的 .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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com