全体: Sprockets 2 での回帰です。説明と解決策を読んでください。
内部でのデバッグの仕組み
次のように呼び出されるファイルがあるとvendor.js
します。
# vendor.js
//= require jquery
//= require knockout
//= ... some more requires
function one() { }
function two() { }
// and some javascript code
まず、アセット デバッグの機能を見てみましょう。
<script src="vendor.js">
デバッグが無効になっている場合は、単一のタグを配置します。
(また)
<script src="vendor.js?body=1">, <script src="jquery.js?body=1">, <script src="knockout.js?body=1">, ...
デバッグが有効な場合は複数配置
はbody=1
、デバッグの不可欠な部分でもあります。あなたが言うなら、<script src="vendor.js?body=1">
それは内部のjavascriptのみをレンダリングしvendor.js
ます。require ...
他のコードは含まれません。
vendor.js
ただし、 を付けずに単独でヒット?body=1
すると、すべてのrequire ...
コードも含まれます。
したがって、上記の 2 つを組み合わせると、必要なデバッグ出力が生成されます。私たちがやりたいことは、 と言うとき、 NOが追加されjavascript_include_tag "vendor", :debug => false
た単一の<script src="vendor.js">
タグが欲しいということです。 ?body=1
回帰の説明
リグレッション コードはこちらです。具体的には、バグのあるコードは次の 1 つのステートメントです。
L88. if request_debug_assets?
request_debug_assets? をチェックしてから、:debug => true
#92 行目でさらに自動的に設定します。ただしrequest_debug_assets?
、アプリケーション構成レベルで設定されているため、true を返しています。
この 1 つのステートメントは、理想的には次のようにする必要があります。
L88. if request_debug_assets? && options["debug"] != false
ソリューション / パッチ
同じプル リクエストを発行しますが、プル リクエストがレビューされてマージされるまでは、イニシャライザで次の操作を実行できます。
# config/initializers/sprockets_debug_patch.rb
module Sprockets::Rails::Helper
def javascript_include_tag(*sources)
options = sources.extract_options!.stringify_keys
# CHECK options["debug"] as well, not just the global assets.debug
if request_debug_assets? && options["debug"] != false
# REST ALL SAME CODE AS ORIGINAL METHOD
も同様に行いstylesheet_include_tag
ます。残念ながら、メソッド コードをコピーして貼り付ける以外に良い方法はありませんが、これで問題は解決します。
クラス全体で、これはすべて Sprockets 3.x で非推奨になるとSprockets::Rails::Helper
書かれていることがわかります。Rails 4 が Sprockets 3.x に同梱される予定があるかどうかはわかりません。その場合、これらのパッチは不要になる可能性があります。