Heroku上的Symfony2(官方Buildpack)-如何转储资源?

4
我在heroku(官方的php buildpack)上使用Symfony assets时遇到了问题。我的代码基于Symfony 2.5和新的3.0文件夹结构,并且使用一个本地的js和css文件(其余的通过cdn加载)。这些文件的加载方式与此处描述的完全相同:http://symfony.com/doc/current/cookbook/assetic/asset_management.html
在开发环境中一切正常,但是当我将环境更改为生产环境时,我需要运行assetic:dump来强制Symfony将我的assets文件转储到web/css|js文件夹中。我在我的本地机器上进行了测试(将环境切换为生产环境),一切都很好。问题出在heroku上,因为它的短暂文件系统:
当我尝试通过composer post-install-cmd运行assetic:dump --env=prod时,部署成功完成,但每个请求最终都以以下方式结束:
AH01071: Got error 'PHP message: PHP Fatal error: Uncaught exception
'InvalidArgumentException' with message 
'The file "/tmp/build_012d99e7-a14a-4626-afec-3ded3d4baeec/app/config/routing.yml"

如果我不使用 assetic:dump 部署应用程序,那么我的本地 css 和 js 文件当然是不可用的 :/

也许还有其他脚本钩子可以用来转储我的资源?

有什么想法吗?有人在 heroku 和官方 php 构建包上成功使用 assetic:dump 吗?

1个回答

2

最近几个月,PHP和Symfony的支持得到了大力改进,可以查看以下链接:

最重要的是:

设置环境变量SYMFONY_ENV

SYMFONY_ENV的值用于为CLI命令定义环境。因此,您不必在自定义命令中使用--env=prod等选项。来自composer.json的Composer钩子(如post-install-cmd)会自动以定义的环境执行。请注意:将其设置为与dev不同的值。在Heroku上,dev环境可能无法正常工作,因为Composer的开发依赖项(require-dev)未安装。这是由于composer install期间使用的--no-dev标志造成的。例如,在Symfony Standard Edition中,如果不将SensioGeneratorBundle移动到composer.jsonrequire键中,则永远不会安装它(并且dev环境将无法工作)。

/tmp路径上的错误

提到的错误应该已经通过https://github.com/symfony/symfony/pull/12784得到了修复。还可以参见https://github.com/heroku/heroku-buildpack-php/issues/64

部署期间的自定义命令

可以在composer.json的脚本部分中的compile键下放置像assetic:dump这样的自定义命令:

{
    "scripts": {
        "compile": [
          "app/console assetic:dump"
        ]
    }
}

参见 https://devcenter.heroku.com/articles/php-support#custom-compile-step。 环境取自上述提及的SYMFONY_ENV环境变量。

谢谢,我已经查看了几个链接,现在我的问题好像都解决了:> - Freyr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接