Sprockets的asset_path不返回生产中HTML资产的消化路径。

时间:2013-08-24 07:00:45

标签: javascript ruby-on-rails ruby asset-pipeline sprockets

我有一些模板HTML和JS文件位于assets目录中,结构如下:

app
 - assets
   - templates 
     - my_template.html
   - javascripts
     - application.js
     - main.js.erb

application.js包含标准sprockets指令://= require main

main.js.erb包含对my_template.html路径的引用: main.js.erb:     //这里有些代码......     返回{         pathToTemplate:“<%= asset_path'my_template.html'%>”     }     //这里有更多代码......

在开发中,这很有效。 main.js.erb评估如下:

// Some code here ...
return {
    pathToTemplate: "assets/my_template.html"
}
// More code here

在生产中,资产已预编译(已删除gzip和空格),并且指纹附加到文件名。

生产main.js.erb 应如下所示:

pathToTemplate: "assets/my_template-610dd79b5bb3c20d14b81baa891fc9dd.html"

但与开发中的相同。

是否需要将Sprockets配置为指纹HTML文件?也许这是一个错误,因为它产生了一个 带有指纹路径的清单文件,但asset_path在main.js.erb中返回非指纹路径?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

Sprockets本身不再实现asset_path - 这是Action View提供的Rails助手。

https://github.com/rails/rails/blob/cd0b6233ae22f6bc8407d240eb2f933ca122f86d/actionpack/lib/action_view/helpers/asset_url_helper.rb#L120

这个问题应该为你解答其余部分:

Ruby on Rails 4 and usage of asset_path

答案 1 :(得分:0)

我发现如果我获取templates目录中的所有文件夹,并将它们放在assets / images文件夹中,那么asset_path将按预期工作并返回指纹路径。我希望这是一个Rails错误。