web-dev-qa-db-ja.com

config.assets.precompileの目的は何ですか?

Rails 3.1では、アセットのプリコンパイルに含めるファイルをホワイトリストに登録する必要があります。config/ environment/production.rbを開いて、プリコンパイルするアセットを明示的に含める必要があります。

config.assets.precompile += ['somestylesheet.css']

これを行わずにrake Assets:precompileを実行すると、アセットはパブリック/アセットにコピーされず、アプリで例外が発生します(したがって、本番環境で500エラーが発生します)アセットが見つからない場合。

なぜこれが必要なのですか? allアセットが自動的にプリコンパイルされないのはなぜですか?

この現在のアプローチでは、展開時に余分なコードとストレスが発生します。アセットをブラックリストに登録/除外して、箱から出してすぐに機能するようにする方が簡単ではないでしょうか。他の誰かがこれらの感情を共有しますか?

29
dhulihan

ほとんどのアセットアセットの事前コンパイルに自動的に含まれます。アセットパイプラインの RoRガイドによると

ファイルをコンパイルするためのデフォルトのマッチャーには、application.js、application.css、およびjsまたはcssで終わらないすべてのファイルが含まれます。[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]

含める追加のアセットがある場合は、config.assets.precompileを使用します。

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']

または、上書きすることもできます。

19
Simon Peck

個別のファイルを必要とするパイプライン/スプロケットの機能に関係していると思います。

たとえば、admin.jsフォルダにapp/assets/javascriptsファイルがあります。しかし、それが行うのは、他のいくつかの.jsファイルを必要とすることだけです。

//= require jquery
//= require jquery_ujs
//= require jquery.colorpicker.js
//= require jquery.wysiwyg.js
//= require wysiwyg.image.js
//= require jquery.fileupload.js
//= require jquery.fileupload-ui.js
//= require codemirror.js
//= require css.js
//= require admin_load

これは、(a)外部のjsプラグインを使用しており、(b)jQueryオンロードハンドラーなどを別々のファイルに保持したいためです。

every .jsファイルがプリコンパイルされている場合、これらの個々のファイルのそれぞれがプリコンパイルされます。これはまったく不要です。私が欲しい/必要なのは、プリコンパイルされた単一のadmin.jsファイルだけです。

CSSファイルについても同じことが言えます。

8
Callmeed

私にプリコンパイルされたアセットはかっこいいので、不要なアセットをデプロイすることはありません。また、JavaScriptの圧縮に役立つuglifergemも忘れないでください。これらすべてのイメージングは​​存在せず、アプリをデプロイするだけで、未使用のcssファイルと非圧縮のJavaScriptがあることがわかります。あなたならどう思う。これは私自身の意見であり、アセットパイプラインはRailsで最もクールなものだと思います。すべてのアセットを適切に管理できること。

そして、私がRails私はあなたが望まないアセットをコンパイルしたくないので、なぜこの男がこれらのアセットをコンパイルしたのかを頭の中で言うでしょう.. :)

2
Uchenna