【问题标题】:Set the path of the symfony2 cache files during cache:clear在 cache:clear 期间设置 symfony2 缓存文件的路径
【发布时间】:2013-07-19 18:21:35
【问题描述】:

所以我的问题很简单:我们可以在 cache:clear 期间设置 symfony2 缓存文件的路径,我们可以稍后更改它还是让它相对?还是什么?

解释:

我正在 Heroku 上部署一个 Symfony2 应用程序,使用 heroku-buildpack-php-tyler 的一个分支:heroku-buildpack-symfony2

在部署时,平台会收到一个 git push 到一个随机的临时位置,例如 /tmpXXXX/ 用于编译/安装/等。

编译后,它会将 /tmpXXXX/ 的内容存储为应用程序的“zip 安装”,以便轻松将其部署到其他实例上。然后应用在启动时部署到新实例的 /app/ 目录。

问题是,如果我们在编译结束前运行一个cache:clear,缓存文件的路径是从/tmpXXXX/ 位置...破坏一切。

因此,解决方法是在启动期间预热缓存,它可以工作,但通常需要超过 60 秒,如果您的应用在超过 60 秒内启动,则在 heroku 上,it gets rebooted 并且您会收到错误。

【问题讨论】:

    标签: symfony heroku


    【解决方案1】:

    我正在回答我自己的问题,因为我在 CCH/Heroku buildpack 上为它做了一个公关

    一个简单的sed 就像在这个file 中一样。

    代码如下:

        find $CACHE_DIR/app/cache/prod -type f -exec sed -i "s@$CACHE_DIR@$APP_DIR@g" {} \; | indent
    

    【讨论】:

      【解决方案2】:

      您可以为您的部署创建custom Symfony environment called "deploy",然后创建override the different cache folders

      一旦您有了新环境(在下面的示例中名为“deploy”),您可以将 app/AppKernel.php 类的方法 getCacheDir 重写为类似这样的内容

      public function getCacheDir()
      {
          if ($this->environment === "deploy") {
              return '/the/path/to/your/symfony/cache/'.$this->environment;
          } else {
              return $this->rootDir.'/cache/'.$this->environment;
          }
      }
      

      确保环境只能由受信任的用户在本地访问。

      【讨论】:

      • 好主意!但是这也意味着我的缓存文件将被转储到 /app/app/cache/ 并且我必须在容器编译结束之前将它们复制回我的本地目录。我会考虑的。
      【解决方案3】:

      这里有针对这种情况的讨论和适当的解决方案...

      https://github.com/heroku/heroku-buildpack-php/issues/64

      https://github.com/symfony/symfony/pull/10999

      还有一个带有修复功能的新 buildpack(我现在就试试)

      https://github.com/CHH/heroku-buildpack-php/pull/67

      【讨论】:

      • 嘿,是的,我所做的修复仍然存在!
      猜你喜欢
      • 2013-03-28
      • 2015-08-10
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多