我正在尝试复制rails 3.0应用程序中rails 3.1中引入的资产管道的基础知识。
到目前为止,我有这样的事情: https://gist.github.com/1112393
效果很好:
问题是,我不希望rails应用程序提供静态资产。服务器应该这样做。 这就是为什么你可以在rails 3.1中预编译资产,如果我理解正确的话。 所以我做了一个rake任务就是这样做(使用Sprockets :: Environment的预编译方法)。它有效,我的所有资产都在/ public / assets /.
例如,我有
但是在rails 3.1中,你可以在style.css.scss.erb
中做类似的事情background: url(<%= asset_path("gallery-icons.png") %>)
你会得到
background: url(/assets/gallery-icons-0e922050a85718fef3cd570df4eb5845.png)
在预编译文件中。
对于stylesheet_link_tag,javascript_link_tag,在rails 3.1中被覆盖以添加哈希,如果我没有弄错的话。
我该怎么做?
给我你的每一个想法!感谢。
答案 0 :(得分:4)
乔希在这里回答我:https://github.com/sstephenson/sprockets/issues/151
Assets = Sprockets::Environment.new(Rails.root) do |env|
assets = ["javascripts", "stylesheets", "images", "fonts"]
paths = ["app/assets/", "lib/assets/", "vendor/assets/" ].map{|p| assets.map{|f| "#{p}#{f}" } }.flatten
paths.each{ |path| env.append_path path }
env.static_root = Rails.root.join("public", "assets")
end
基本上,我有一个rake任务来预编译资产:
namespace :assets do
task :precompile => :environment do
Assets.precompile(*Rails.application.config.assets.precompile)
end
end
我的问题主要是知道如何申请这些资产。 答案很简单:
Assets['application.js'].digest
拥有指纹,很容易获得文件名。
我创建了帮助程序以包含这些资产:sprockets_include_tag
和sprockets_image_tag
。
完成交易。
(虽然现在,我不能在我的样式表中使用这些助手(style.css.scss.erb))
答案 1 :(得分:2)
编辑:Harry Brundage重写了我的宝石,它使用了所有内容的更新版本,它可能就是您想要使用的内容:
https://github.com/hornairs/sprockets-rails
旧建议:
我已经创建了一个可以包含在Rails 3.0.x Gemfile中的gem,它是Rails 3.1 sprockets集成的提取:
https://github.com/jamesmacaulay/sprockets_rails3_backport
与Rails 3.1行为存在一些差异,但它们在README中有详细记录。对于您想要调整的大部分内容,您可以取消注释我已注释掉的行。