0

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

解释 :

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

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

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

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

因此,解决方法是在启动期间预热缓存,它可以工作,但通常需要超过 60 秒,并且在 heroku 上,如果您的应用程序启动时间超过 60 秒,它会重新启动并出现错误。

4

3 回答 3

1

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

一个简单sed的技巧就是在这个文件中。

代码如下所示:

    find $CACHE_DIR/app/cache/prod -type f -exec sed -i "s@$CACHE_DIR@$APP_DIR@g" {} \; | indent
于 2014-03-23T09:29:08.857 回答
0

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

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

于 2014-11-30T08:52:08.503 回答
0

您可以为您的部署创建一个名为“deploy”的自定义 Symfony 环境,然后覆盖不同的缓存文件夹

一旦你有了你的新环境(在下面的例子中命名为“deploy”),你可以getCacheDir将类的方法重写app/AppKernel.php为这样的东西

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

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

于 2013-07-20T16:52:10.400 回答