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:无法解析节点可执行文件的路径