2013-02-06 13 views
10

Ruby on Rails 3.1プロジェクトでJavascriptに富んだアプリケーションを作成していて、JSテンプレートフレームワークにHandlebarsを使用しています。私は、資産のプリコンパイル時に生成された資産のMD5ダイジェストを自分のHandlebarsテンプレート内のタグに動的に追加する方法を見つけようとしています。私は、アセットパスをキーとしたMD5ダイジェストと値としてのハッシュがあることを期待していますが、私はそれを見つけることができませんでした。Railsのアセットパイプラインで特定のアセットのMD5ダイジェストを確認するにはどうすればよいですか?

RubyからJavascriptにハッシュを渡し、自動的にMD5ダイジェストをアセットの「src」属性に追加するHandlebarsヘルパーを定義するのが理想的です。

誰かが同様のことを試みましたか? RailsでJavascriptテンプレートを使用し、アセットフィンガープリンティングのメリットを享受する方法が必要です。

+0

これは、生産ENVのデフォルトである[資産パイプラインguide](http://guides.rubyonrails.org/asset_pipeline.html) –

+1

jsonレスポンスでasset_pathを使うのはどうですか? – mathieugagne

答えて

36

コメントに記載されているように、アセットパスにハッシュを追加することは、アセットパイプラインのデフォルト部分です。製造において

ファイルは、Webブラウザ

によってキャッシュされるように、Railsはあなたが資産パイプラインhereにフィンガープリントの詳細を読むことができ、各ファイル名にMD5フィンガープリントを挿入します。 RailsはSprocketsを使用してアセットをコンパイルします。フィンプリントは、スプロケットプロセスの一部として提供されます。

スプロケットのfind_assetメソッドを使用して、アセットの論理パスを渡してSprockets::BundledAssetインスタンスを取得できます。例

[1] pry(main)> Rails.application.assets.find_asset('application.js') 
=> #<Sprockets::BundledAsset:0x3fe368ab8070 pathname="/Users/deefour/Sites/MyApp/app/assets/javascripts/application.js", mtime=2013-02-03 15:33:57 -0500, digest="ab07585c8c7b5329878b1c51ed68831e"> 

のためにあなたはそれが資産に追加MD5合計です取得するには、このオブジェクトにdigest_pathを呼び出すことができます。この知識を用いて

[1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path 
=> "application-ab07585c8c7b5329878b1c51ed68831e.js" 

簡単にあなたのアプリケーション内のすべての資産のためdigest_pathを返すためにヘルパーを作成し、あなたの.js.erbファイル内からこのヘルパーを呼び出すことができます。

+0

find_assetメソッドは、私が探していたもので、見つけることができませんでした。どうもありがとうございました! –

+0

ダイジェストパスが実際のファイル名と異なるのはなぜですか? – rardoz

2

これは、古い質問ですが、今日あなたがassets_manifestを使用できるようです。ここ

Rails.application.assets_manifest.assets["application.css"] => "application-46ae33e78e504ff295219f41d63c79719d062e48dc0c07bd9b6f7bcad72c6636.css"

もっと議論:https://github.com/rails/sprockets-rails/issues/311

関連する問題