Heroku上的Symfony2(官方buildpack) - 如何转储资产?

时间:2014-07-25 08:46:05

标签: php symfony heroku assetic

我在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上转储?

1 个答案:

答案 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环境变量。