我在heroku上的Symfony资产有问题(官方php buildpack).
我的代码基于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"
当我部署没有资产的应用程序:转储当然我的本地css和js文件不可用:/
也许还有一些其他脚本钩我可以用来转储我的资产?
有任何想法吗?任何成功的资产:在heroku和官方php buildpack上转储?
最佳答案 PHP和Symfony的支持在过去几个月中已经进行了很多改进,请查看以下链接:
> http://symfony.com/doc/current/cookbook/deployment/heroku.html
> https://devcenter.heroku.com/articles/getting-started-with-php
> https://devcenter.heroku.com/articles/php-support
> https://devcenter.heroku.com/articles/getting-started-with-symfony2
最重要的是:
为SYMFONY_ENV设置环境变量
SYMFONY_ENV的值用于定义CLI命令的环境.因此,您不必在自定义命令中使用–env = prod这样的东西. composer.json的composer钩子(如post-install-cmd)会自动使用定义的环境执行.请注意:将其设置为与dev不同的内容.开发环境在Heroku上可能无法正常工作,因为未安装Composer的dev依赖项(require-dev).这是由于在Heroku上安装作曲家时的–no-dev标志.例如,在Symfony标准版中,SensioGeneratorBundle永远不会安装(如果你没有将它移动到composer.json中的require键),dev环境将无法工作.
/ tmp路径出错
所提到的错误应该已经用https://github.com/symfony/symfony/pull/12784修正了.另见https://github.com/heroku/heroku-buildpack-php/issues/64.
部署期间的自定义命令
像assetic:dump这样的自定义命令可以放在编译键下的composer.json的脚本部分中:
{
"scripts": {
"compile": [
"app/console assetic:dump"
]
}
}
另请参见https://devcenter.heroku.com/articles/php-support#custom-compile-step.环境取自上面提到的SYMFONY_ENV环境变量.