Symfony2 on Heroku(官方构建包)-如何转储资产


Symfony2 on Heroku (official buildpack) - how to dump assets?

我在heroku(官方php buildpack)上有一个Symfony资产的问题。我的代码是基于Symfony 2.5与新的3.0文件夹结构,它使用一个本地js和css文件(其余的是通过cdn加载)。这些文件完全按照下面描述的方式加载:http://symfony.com/doc/current/cookbook/assetic/asset_management.html.

在开发环境下一切正常,但当我改变环境为prod,然后我需要做asset:dump强制symfony转储我的资产文件到web/css|js文件夹。我在本地机器上进行了测试(将env切换到prod),一切正常。问题在于heroku及其短暂的文件系统:

当我尝试运行asset:dump——env=prod by composer post-install-cmd,然后部署完成成功,但每个请求结束:

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"

当我部署应用程序没有asset:dump然后当然我的本地css和js文件不可用:/

也许有一些其他的脚本挂钩,我可以使用转储我的资产?

任何想法?有人成功地在heroku和官方php构建包上使用了assetic:dump吗?

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(如post-install-cmd)的编写器钩子会在定义的环境中自动执行。请注意:将其设置为与dev不同的东西。dev环境可能不能很好地在Heroku上工作,因为没有安装Composer的开发依赖项(require-dev)。这是由于在Heroku的composer install期间--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的脚本部分下的compile键:

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

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