4

Rails 3.0 app で Rails 3.1 に導入されたアセット パイプラインの基本を複製しようとしています。

これまでのところ、 https ://gist.github.com/1112393 のようなものがあります。

それはうまくいきます:

  • app/assets/、lib/assets、vendor/assets にアセットがあります...
  • それらはすべて /assets で提供されます
  • スプロケット2のオファーなどすべてを使用できます...

問題は、Rails アプリに静的アセットを提供させたくないということです。サーバーがそれを行う必要があります。私が正しく理解していれば、Rails 3.1 でアセットをプリコンパイルできるのはそのためです。そこで、まさにそれを行う rake タスクを作成しました (Sprockets::Environment の precompile メソッドを使用)。すべてのアセットが /public/assets/ にあります。

たとえば、私は

  • アプリケーション-02f8c96b342b4569513d0edf39ef55eb.css
  • アプリケーション-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)

プリコンパイル済みファイル内。

私が間違っていなければ、ハッシュを追加するためにRails 3.1で上書きされるstylesheet_link_tag、javascript_link_tagについても同じです。

これどうやってするの?

ありとあらゆるアイデアをください!ありがとう。

4

2 に答える 2

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_tagsprockets_image_tag.

取引完了。

(ただし、現在、スタイルシート (style.css.scss.erb) でこれらのヘルパーを使用することはできません)

于 2011-08-11T22:20:52.777 に答える
2

編集: Harry Brundage は、すべての最新バージョンを使用するように私の gem を書き直しました。

https://github.com/hornairs/sprockets-rails

古い提案:

Rails 3.1 スプロケット統合の抽出である Rails 3.0.x Gemfile に含めることができる gem を作成しました。

https://github.com/jamesmacaulay/sprockets_rails3_backport

Rails 3.1 の動作とはいくつかの違いがありますが、それらは README に詳しく記載されています。微調整したいもののほとんどで、私がコメントアウトした行のコメントを外すことができます.

于 2012-01-04T20:16:38.677 に答える