加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在Rails 3.0.x中使用Sprockets 2(如何使用

发布时间:2020-12-17 03:01:04 所属栏目:百科 来源:网络整理
导读:我正在尝试复制rails 3.0应用程序中rails 3.1中引入的资产管道的基础知识. 到目前为止,我有这样的事情: https://gist.github.com/1112393. 它很棒: 我的资产在app / assets /,lib / assets,供应商/资产…… 他们都在/资产服务 我可以使用链轮2提供的所有东
我正在尝试复制rails 3.0应用程序中rails 3.1中引入的资产管道的基础知识.

到目前为止,我有这样的事情:
https://gist.github.com/1112393.

它很棒:

>我的资产在app / assets /,lib / assets,供应商/资产……
>他们都在/资产服务
>我可以使用链轮2提供的所有东西等……

问题是,我不希望rails应用程序提供静态资产.服务器应该这样做.
这就是为什么你可以在rails 3.1中预编译资产,如果我理解正确的话.
所以我做了一个rake任务就是这样做(使用Sprockets :: Environment的预编译方法).它有效,我的所有资产都在/ public / assets /.

例如,我有

> application-02f8c96b342b4569513d0edf39ef55eb.css
> application-505e8f472350fb1e0d15f6ad2f5e0389.js
> gallery-icons-0e922050a85718fef3cd570df4eb5845.png

但是在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中被覆盖以添加哈希,如果我没有弄错的话.

我怎样才能做到这一点?

给我你的每一个想法!谢谢.

解决方法

乔希在这里回答我: 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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读