我在heroku(官方php buildpack)上遇到Symfony资产的问题。 我的代码基于Symfony 2.5,具有新的3.0文件夹结构,并且它使用一个本地js和css文件(其余的是通过cdn加载的)。 完全按照此处所述加载这些文件:http://symfony.com/doc/current/cookbook/assetic/asset_management.html。
在开发环境中一切正常,但是当我将env更改为prod然后我需要做资产:dump强制symfony将我的资产文件转储到web / css | js文件夹中。我在我的本地机器上进行了测试(切换env到prod),一切正常。问题在于heroku及其短暂的文件系统:
当我尝试运行assetic:dump --env = prod by composer post-install-cmd,然后使用successs部署完成,但每个请求最终都是:
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"
当我部署没有资产的app:dump当然我的本地css和js文件不可用:/
也许我可以使用其他一些脚本钩来转储我的资产?
有什么想法吗?任何成功的资产:在heroku和官方php buildpack上转储?
答案 0 :(得分:2)
PHP和Symfony支持在过去几个月中已经进行了大量修改,请查看以下链接:
最重要的是:
为SYMFONY_ENV
SYMFONY_ENV
的值用于定义CLI命令的环境。因此,您不必在自定义命令中使用--env=prod
之类的东西。来自composer.json
的合成器挂钩(如post-install-cmd
)将在定义的环境中自动执行。请注意:将其设置为与dev
不同的值。 dev
环境在Heroku上可能无法正常工作,因为未安装Composer的dev依赖项(require-dev
)。这是由于Heroku上--no-dev
期间的composer install
标志。例如,在Symfony标准版中)SensioGeneratorBundle永远不会安装(如果你没有将它移动到require
中的composer.json
键)并且dev
环境不能正常工作
/ tmp路径错误
应该使用https://github.com/symfony/symfony/pull/12784修复上述错误。另请参阅https://github.com/heroku/heroku-buildpack-php/issues/64。
部署期间的自定义命令
assetic:dump
等自定义命令可以放在composer.json
键下的compile
脚本部分中:
{
"scripts": {
"compile": [
"app/console assetic:dump"
]
}
}
另见https://devcenter.heroku.com/articles/php-support#custom-compile-step。环境取自上面提到的SYMFONY_ENV
环境变量。