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

Chr*_*ski 16 php amazon-web-services symfony-2.1 amazon-elastic-beanstalk

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

经过一番挖掘后,我发现Symfony2缓存文件中有绝对路径字符串.该命令我加入运行"预部署"或之前的应用程序文件从他们的临时文件夹中移动(称为"在/ var /应用/ ondeck"),以他们的最后安息的地方("的/ var /应用/电流").因此,缓存文件中的绝对路径字符串是错误的,并且应用程序无法加载.

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

我的问题:

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

提前谢谢大家:-)

rhu*_*cks 9

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

解决方案是将缓存清除为部署的最后一个命令,并指定--no-warmup以停止Symfony自动重新填充它,以便在环境从ondeck移动到当前时缓存为空.在我的.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
Run Code Online (Sandbox Code Playgroud)

它没有很好的文档记录,但您也可以使用部署后挂钩在环境移动到当前加热缓存.也在.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      
Run Code Online (Sandbox Code Playgroud)


小智 0

尝试覆盖 getCacheDir 吗?

在应用程序/AppKernel.php中:

public function getCacheDir()
{
    return "/path/to/the/cache";
}
Run Code Online (Sandbox Code Playgroud)