Symfony2和Assetic - cssrewrite在开发环境下完美工作,在生产环境下不起作用。

8

我使用以下代码来引入我的CSS:

{% stylesheets 'bundles/majorproductionssewingdivasite/css/*.css' filter='cssrewrite' %}
    <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
{% endstylesheets %}

在开发中,这使我可以使用图像精灵而没有任何问题。 精灵的URL如下:
http://localhost/diva/web/bundles/majorproductionssewingdivasite/images/diva-sprites.jpg
但是,在生产环境中,它被映射到:
http://localhost/diva/bundles/majorproductionssewingdivasite/images/diva-sprites.jpg
请注意缺少web目录。
在CSS文件中生成的代码是正确的,并且我的所有CSS(包括dev“块”和最终的prod assetic dump)都位于web / css /。 有什么想法,为什么生产环境跳过了web目录?
编辑:奇怪的是,dev和prod在CSS本身中生成相同的URL: url('../../bundles/majorproductionssewingdivasite/images/diva-sprites.jpg')
4个回答

20

解决方案是在生产环境中删除资产:

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

7
这是正确答案。但你可能需要先清除缓存,使用命令 php app/console cache:clear --env=prod。在清除缓存之前倾倒资产文件并不能解决我的问题。我对Symfony2还有些陌生,但从我刚刚的经验来看,它似乎是从缓存中倾卸资产文件,而不是从物理文件中。 - cartbeforehorse
哎呀,我怎么会错过这个 @_@ - GusDeCooL

9
记得清除缓存。
php app/console cache:clear --env=prod --no-debug

之前

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

2
同时记得适当配置 assetic,在你的 config_prod.yml 中设置如下:
assetic:
    use_controller: false

编辑: 如Symfony文档所述(实际上是在参考开发环境相关章节):告诉Symfony停止动态处理这些文件。


请在回复中包含一些额外的细节,以使您的回复更加完整。 - amonk
1
你是正确的,但通常的配置已经是 use_controller: '%kernel.debug%' - Arno

0
在调试模式下,Assetic 1.1似乎会重写CSS,即使它不在{% stylesheets %}标签中。因此,在生产环境中关闭调试时,值得检查其是否存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接