開発環境でアセットをプリコンパイルできないのはなぜですか?スプロケットは基本的にすべてのアセットをコンパイルすることを知っています。
本番環境に入るときは、次のコマンドを実行します。
rake assets:precompile
しかし、開発環境では、それ自体をコンパイルするために何もすることはできません。両方の環境でのアセットのコンパイルの動作の違いは何ですか?
すべてのWebアプリケーションには、見栄えをよくするための画像とCSSファイル、およびユーザーの操作と動作を処理するJavaScriptファイルが含まれています。アセットの読み込みが速い場合、Webアプリケーションのパフォーマンスが向上するはずです。圧縮、gzip圧縮、キャッシングなど、アセットを高速にロードするための多くの戦略があります。
開発モードでは、アセットはマニフェストファイルで指定された順序で個別のファイルとして提供されます。
このマニフェストapp/assets/javascripts/application.js:
//= require core
//= require projects
//= require tickets
本番環境では、Sprocketsは上記で概説したフィンガープリント方式を使用します。デフォルトではRailsは、アセットがプリコンパイルされており、Webサーバーによって静的アセットとして提供されることを前提としています。
プリコンパイル段階では、コンパイルされたファイルの内容からMD5が生成され、ディスクに書き込まれるときにファイル名に挿入されます。これらのフィンガープリントされた名前は、マニフェスト名の代わりにRailsヘルパーによって使用されます。
たとえばこれは:
<%= javascript_include_tag "application" %>
<%= stylesheet_link_tag "application" %>
このようなものを生成します:
<script src="/assets/application-908e25f4bf641868d8683022a5b62f54.js"></script>
<link href="/assets/application-4dd5b109ee3439da54f5bdfd78a80473.css" media="screen"
rel="stylesheet" />
注:アセットパイプラインでは、:cacheおよび:concatオプションは使用されなくなりました。これらのオプションをjavascript_include_tagおよびstylesheet_link_tagから削除してください。
フィンガープリントの動作は、config.assets.digest初期化オプションによって制御されます(デフォルトでは、プロダクションの場合はtrue、それ以外の場合はfalseになります)。
開発環境でアセットをプリコンパイルする場合は、次のコマンドを使用できます。
Rails_ENV=development bundle exec rake assets:precompile
Config/development.rbを使用して、デフォルトで開発環境でアセットをプリコンパイルできます。
config.assets.debug = false
ほとんどの場合、開発プロセスがより困難になるため、それは必要ありません。