gpt4 book ai didi

php - Heroku 上的 Symfony2(官方构建包)——如何转储 Assets ?

转载 作者:可可西里 更新时间:2023-10-31 23:30:55 29 4
gpt4 key购买 nike

我对 heroku(官方 php 构建包)上的 Symfony Assets 有疑问。我的代码基于具有新的 3.0 文件夹结构的 Symfony 2.5,它使用一个本地 js 和 css 文件(其余通过 cdn 加载)。这些文件完全按照此处所述加载:http://symfony.com/doc/current/cookbook/assetic/asset_management.html .

在开发环境中一切正常,但是当我将 env 更改为 prod 时,我需要执行 assetic:dump 以强制 symfony 将我的 Assets 文件转储到 web/css|js 文件夹中。我在本地机器上进行了测试(将 env 切换为 prod),一切正常。问题在于 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 文件不可用:/

也许有一些其他的脚本钩子(Hook)可以用来转储我的 Assets ?

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

最佳答案

PHP 和 Symfony 支持在过去几个月中进行了大量改进,请查看以下链接:

最重要的是:

SYMFONY_ENV 设置环境变量

SYMFONY_ENV 的值用于定义 CLI 命令的环境。因此,您不必在自定义命令中摆弄诸如 --env=prod 之类的东西。 composer.json 中的 Composer Hook (如 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 .环境取自上面提到的SYMFONY_ENV环境变量。

关于php - Heroku 上的 Symfony2(官方构建包)——如何转储 Assets ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24951635/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com