16

Ruby on Rails 3.1 プロジェクトで Javascript が豊富なアプリケーションを作成し、JS テンプレート フレームワークにハンドルバーを使用しています。アセットの MD5 ダイジェスト (本番環境でのアセットのプリコンパイル中に生成) を、Handlebars テンプレート内のタグに動的に追加する方法を見つけようとしています。アセット パスをキーとし、MD5 ダイジェストを値とするハッシュがあることを期待していますが、見つけることができませんでした。

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

誰かが似たようなことをしようとしましたか? Rails で Javascript テンプレートを使用し、アセットのフィンガープリンティングの利点を享受する方法が必要です。

4

2 に答える 2

44

誰かがコメントで述べたように、アセット パスにハッシュを追加することは、アセット パイプラインのデフォルトの部分です。

本番環境では、Rails は各ファイル名に MD5 フィンガープリントを挿入して、ファイルが Web ブラウザーによってキャッシュされるようにします。

アセット パイプラインでのフィンガープリンティングの詳細については、こちらをご覧ください。Rails はSprocketsを使用してアセットをコンパイルします。フィンガープリンティングは、Sprockets プロセスの一部として行われます。

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">

digest_pathこのオブジェクトを呼び出しMD5て、アセットに追加された合計を取得できます。

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

この知識があればdigest_path、アプリケーション内の任意のアセットに対して を返すヘルパーを簡単に作成し、.js.erbファイル内からこのヘルパーを呼び出すことができます。

于 2013-02-06T01:50:16.030 に答える