Symfony2 和 Assetic - cs-s-rewrite 非常适合开发,而不是产品

Posted

技术标签:

【中文标题】Symfony2 和 Assetic - cs-s-rewrite 非常适合开发,而不是产品【英文标题】:Symfony2 and Assetic - cs-s-rewrite works perfectly for dev, not for prod 【发布时间】:2012-12-13 22:21:45 【问题描述】:

我将我的 CSS 包含在以下代码中:

% stylesheets 'bundles/majorproductionssewingdivasite/css/*.css' filter='cs-s-rewrite' %
    <link rel="stylesheet" type="text/css" href=" asset_url " />
% endstylesheets %

在开发中,这让我可以毫无问题地使用图像精灵。我的精灵的结果 URL 是:

http://localhost/diva/web/bundles/majorproductionssewingdivasite/images/diva-sprites.jpg

但是,在 prod 中,它被映射到:

http://localhost/diva/bundles/majorproductionssewingdivasite/images/diva-sprites.jpg

请注意缺少 web 目录。

CSS 文件中生成的代码是应有的,我所有的 CSS(开发“块”和最终的产品资产转储)都位于 web/css/。关于为什么 prod 环境跳过 web 目录的任何想法?

编辑:奇怪的是 dev 和 prod 在 CSS 本身中生成相同的 URL:

url('../../bundles/majorproductionssewingdivasite/images/diva-sprites.jpg')

【问题讨论】:

【参考方案1】:

解决方案是将资产转储到 prod 环境中:

$ app/console assetic:dump --env=prod

【讨论】:

这是正确答案。但是您可能也需要先清除缓存php app/console cache:clear --env=prod。在清理缓存之前转储资产文件并没有解决我的问题。我对 Symfony2 有点陌生,但从我刚刚经历的情况来看,它似乎是从缓存中转储资产文件,而不是从物理文件中转储。 天哪,我怎么能错过这个@_@【参考方案2】:

记得清除缓存

php app/console cache:clear --env=prod --no-debug

伯乐

php app/console assetic:dump --env=prod --no-debug

【讨论】:

【参考方案3】:

还记得在你的 config_prod.yml 设置中适当配置资产,如下所示:

assetic:
    use_controller: false

编辑: 正如Symfony docs 中所说(实际上在章节中指的是开发环境):告诉 Symfony 停止尝试动态处理这些文件

【讨论】:

请提供一些额外的细节,以使您的回复完整 你是对的,但是通常的配置已经是use_controller: '%kernel.debug%'【参考方案4】:

在调试模式下,Assetic 1.1 似乎也重写了 CSS,即使它不在 % stylesheets % 标记中。因此,当您在生产环境中关闭调试时,值得检查一下。

【讨论】:

以上是关于Symfony2 和 Assetic - cs-s-rewrite 非常适合开发,而不是产品的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - Assetic - 在 CSS 中加载图像

如何让 Assetic + sass 在 Windows 中与 Symfony2 一起工作?

Symfony2 Assetic:无法解析节点可执行文件的路径

Symfony2 - Assetic - css 字体图标

Symfony2 和 Assetic - cs-s-rewrite 非常适合开发,而不是产品

尝试在我的项目中实现没有 Symfony2 的 Twig 和 Assetic