開発モードでJavaScriptファイルを連結するのではなくnotを好みますが、個別のファイルとして提供します。だから私は設定しました:
development.rb:
config.assets.compress = false
config.assets.debug = true
config.assets.compile = true
/ app/assets/javascriptディレクトリには次のものがあります。
reviews.js:
//= require jquery
//= require jquery_ujs
//= require_tree ./reviews
レイアウトに<%= javascript_include_tag "reviews" %>
を使用してJavaScriptを含めます。生成されたページは3つのスクリプトを個別に正しく参照し、reviews.js
は本質的に空です。ここまでは順調ですね。
rake assets:precompile
を使用して本番用にアセットをプリコンパイルすると、3つのJavaScriptファイルがreviews.js
に連結されます。これは本番環境ではすべて問題ありませんが、開発モードでは、連結されたreviews.js
が提供されます追加 2つの個別のファイル。
もちろん、これにより、開発時にあらゆる種類の厄介なバグが発生します。なぜなら、今ではfoo.js
とbar.js
のコンテンツが2回提供され、そのうちの1つはreviews.js
の古いバージョンです。
Railsが開発モードでプリコンパイル済みアセットを使用しないようにするにはどうすればよいですか?
ローカルでプリコンパイルしているようです。ファイルは予想される場所に存在するため、開発サーバーによって処理され、リクエストはスプロケットに送信されません。
これを停止する唯一の方法は、コンパイルされたファイルを削除することです。
通常、ローカルでコンパイルする必要はありません。ほとんどすべての場合、アプリの展開中にプリコンパイルタスクが実行されることが予想されます。アセットパイプラインガイドページに、このためのCapistranoレシピがあります。
これらのファイルをリポジトリにローカルにコミットする必要がある場合は、ブランチを使用して問題を回避できます。マスターブランチを運用コード用に予約し、dev用の2番目のブランチを作成します。マスターでのみアセットをコンパイルおよびコミットします。 devに切り替えると、それらはなくなります。必要に応じて、devをmasterにマージします。
編集:ブラウザーを強制的に更新する(Ctrl + F5)ことを確認してください。そうしないと、ブラウザーのキャッシュから古いアセットが使用されていることがあります。
config/environments/development.rb
セットする:
config.assets.prefix = "/assets_dev"
そのためdevelopment mode Railsはそこを探します(ただし、開発中のアセットをコンパイルしないため、何も見つかりません)行う-アセットをコンパイルしない))。
production用にプリコンパイルするときは、
Rails_ENV=production rake assets:precompile
そのため、デフォルトのアセットフォルダーpublic/assets
。
config/environments/development.rb
セット:
config.serve_static_assets = false
/public
のファイルは提供されません
これを試してみたところ、うまくいきました。 rake assets:precompile Rails_ENV=production
新しいバージョンのアセットパイプラインは、rake assets:precompile
はrake assets:precompile:all