15

私は RoR に比較的慣れていないので、Rails が実稼働用に md5 ハッシュを使用する場合と使用しない場合の両方でアセットをコンパイルする理由に興味がありますか?

bundle exec rake assets:clean私はそれから走りますbundle exec rake assets:precompile

私の production.rb ファイル:

MyApp::Application.configure do

  # Code is not reloaded between requests

  config.cache_classes = true

  # Full error reports are disabled and caching is turned on

  config.consider_all_requests_local       = false

  config.action_controller.perform_caching = true

  # Disable Rails's static asset server (Apache or nginx will already do this)

  config.serve_static_assets = false

  # Compress JavaScripts and CSS

  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed

  config.assets.compile = false

  # Generate digests for assets URLs

  config.assets.digest = true 

  config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  config.assets.precompile += %w(tos.js, tos.css)

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

end

私のアプリケーションは、名前にハッシュを含むファイルで動作し、私の場合はそうあるべきです:)

そこで、ここで 2 つの質問があります。

1) コンパイル時に発生するのはなぜですか?

Rails は、本番用に md5 ハッシュを使用する場合と使用しない場合の両方でアセットをコンパイルします

2) これらのファイル (ハッシュなし) の目的は何ですか?

わからないことがあるかもしれないので、どなたか教えてください。

4

1 に答える 1

15

その理由は、MD5 フィンガープリントを知らなくてもファイルにアクセスできるようにするためです (たとえば、Rails 以外のアプリケーション、または Rails スタックによってコンパイルまたは実行されていない Rails アプリ内のファイル (例: 500 /502 ステータス エラー ページ) この場合、アセットをコンパイルしてから、コードを更新するたびに静的 HTML ファイルの css/js リンクを変更する必要があります (したがって、MD5 ハッシュが変更されます)。

代わりに、Rails は各アセット ファイルの 2 つのコピーを生成します。1 つはファイル名にフィンガープリントがあり、もう 1 つはありません (例: application-731bc240b0e8dbe7f2e6783811d2151a.css と application.css)。明らかにフィンガープリント バージョンが優先されます ( Rails アセット パイプライン ガイドの「フィンガープリントとは何か、なぜ気にする必要があるのか​​」を参照してください)。ただし、消化されていないバージョンはフォールバックとして存在します。

この問題に関する最終的な考えとして、Rails git リポジトリへの次のプル リクエストを読みます: https://github.com/rails/rails/pull/5379 -消化されたファイル名、およびそれらのコンパイルをオフにできる可能性。

HTH

于 2012-04-06T16:40:48.797 に答える