资产生成链接但没有文件
Posted
技术标签:
【中文标题】资产生成链接但没有文件【英文标题】:Assetic generating links but no files 【发布时间】:2012-06-07 11:22:10 【问题描述】:我正在尝试使用 symfony2 中的资产来管理我的 CSS。 链接生成良好。但是,不会生成任何文件。
这是我的配置:
Layout.html.twig
% stylesheets
'@FooBundle/Resources/public/css/main.css'
filter='cs-s-rewrite'
%
<link rel="stylesheet" href=" asset_url " />
% endstylesheets %
Config.yml
assetic:
debug: %kernel.debug%
use_controller: false
bundles: [ FooBundle ]
filters:
cs-s-rewrite: ~
Config_dev.yml
assetic:
use_controller: true
Assetic 生成链接foo.foo/app_dev.php/css/957d3aa_main_1.css
。但是,该文件不存在(或其他任何地方)。我尝试过使用权限并查看(nginx)日志,但到目前为止没有。
所有帮助将不胜感激。
【问题讨论】:
【参考方案1】:在处理资产时,您有 2 个选项。您在计算机中看不到资产的原因是您选择了选项 1。
选项 1:SYMFONY 可以为您动态处理文件
这意味着在开发环境中生成的每个资产路径都由 Symfony 动态处理。因此,Assetic 会生成您计算机上实际不存在的 CSS 和 javascript 文件的路径。这是一个内部 Symfony 控制器,可以打开文件并为您返回内容。
优点: - 对您的资产所做的更改立即生效 - 这在开发模式下非常棒,因为 Symfony 会为您动态生成文件
缺点: - 这在 prod 模式下是不可能的,因为动态渲染每个资产会太慢 - 资产将无法在您的计算机上直接访问(这就是您找不到文件的原因) - 如果您使用大量过滤器等,可能会很慢......
要在开发模式下执行此操作,只需在 config_dev.yml 中编辑资产配置:
assetic:
use_controller: true
选项 2:转储资产文件
如果您不想动态处理资产,您可以手动转储资产,这意味着实际将资产物理写入您的计算机上。
优点: - Symfony 不需要动态生成文件,因此运行速度会快很多 - 因此,这在 prod 模式下是完美的 - 这些文件可以在 web/ 目录中物理访问(或您选择输出它们的任何位置)
缺点: - 每次更改某些内容时都需要转储资产。或者您可以使用 --watch 命令转储资产,如果您在开发模式下工作,这可能会有点烦人。
为此:
将 use_controller 设置为 false (config_dev.yml):
assetic:
debug: %kernel.debug%
use_controller: false
如有必要,您甚至可以选择读取和输出资产的位置
assetic:
read_from: %kernel.root_dir%/Resources/views/
write_to: %kernel.root_dir%/../web/thefolderyouwant/
输出现在从您的 write_to 在assetic 中的配置开始
% stylesheets
'@FooBundle/Resources/public/css/main.css'
output='css/main.css'
%
<link rel="stylesheet" href=" asset_url " />
% endstylesheets %
如果你继续,你将有一个resource error,所以注释掉或删除config_dev.yml中的这些资产路由:
_assetic:
resource: .
type: assetic
最后,您可以自动生成资产,以便您所做的更改立即生效:
php app/console assetic:dump --watch
在这种情况下,文件现在应该可用:
/web/thefolderyouwant/css/main.css
有关更多信息,请参阅食谱:How to use Assetic for Asset Management?
【讨论】:
我认为最好编辑您的第一个答案而不是发布新答案。 这行得通!文件现已创建。但是,/app_dev.php/css/2c29233.css 给出了 404;没有 app_dev.php 它不会。我已经尝试了所有可能的 nginx 配置,但无法让它工作:( 会尝试更多。如果我无法弄清楚,我会发布另一个问题并在此处放置链接。无论如何谢谢!( ps 不能再奖励 17 小时的赏金。我会的,不用担心) 我真的很抱歉,但事实证明它不起作用。它仅在首先倾销资产时才有效。它应该没有..这就是重点:S 在配置中设置 use_controller: false 时,您肯定需要转储资产。 Symfony 不再为您生成这些资产。您可以在转储资产时添加 --watch 以自动添加它们。 查看 6 月 7 日 15:51 的评论 -> 即使我将其设置为 true,文件也不会生成..【参考方案2】:我有同样的问题,我只需要安装java
sudo apt-get install default-jre
您还可以查看输出的开头,这可能会有所帮助:
app/console assetic:dump > outfile 2>&1
【讨论】:
这仅适用于基于 Java 的过滤器(YUI 压缩器)。【参考方案3】:如果您使用 SASS 编译 SCSS 但 ruby
或 ruby gem sass
未安装,则在打开 use_controller: true
时它也不会生成文件。
【讨论】:
【参考方案4】:我遇到了一个与此非常相似的错误。突然,资产停止工作。我唯一添加的是FOSRestBundle。也许您也在使用其余捆绑包。
这是我的解决方案:
fos_rest:
routing_loader:
default_format: json
param_fetcher_listener: true
body_listener: true
format_listener:
rules:
# render "/api" requests as json
- path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true
# default, fallback rendering twig templates
- path: ^/, priorities: ['html', 'application/javascript', 'text/css', '*/*'], fallback_format: html, prefer_extension: true
我将priorities: ['html', '*/*']
更改为priorities: ['html', 'application/javascript', 'text/css', '*/*']
,现在一切正常。
【讨论】:
【参考方案5】:我终于找到解决办法了!!我在这个问题上工作了几个小时!你写道:
'@FooBundle/Resources/public/css/main.css' filter='cs-s-rewrite'
但是“cs-s-rewrite”过滤器不接受@FooBundle 语法!你必须这样做:
php app/console assets:install
Symfony 将创建:
web/bundles/yourbundle/css/main.css
现在,在您的树枝模板中,替换:
'@FooBundle/Resources/public/css/main.css' filter='cs-s-rewrite'
与:
'bundles/yourbundle/css/main.css' filter='cs-s-rewrite'
希望它能帮助别人! (它是在 Symfony 文档中编写的.. ^^)
【讨论】:
以上是关于资产生成链接但没有文件的主要内容,如果未能解决你的问题,请参考以下文章