2011-12-19 15 views
8

これには100万の質問があることは知っていますが、私はこれを得ることができません。Rails 3.1、アセットパイプラインからJSファイルを除外

ほとんどのJSファイルをアセットパイプラインに含める必要がありますが、条件付きで(または特定のページのみで)ロードする必要があります。これらは大きくて複雑なファイルなので、ユーザーの95%が使用することはありません。そのため、すべてのユーザーにそれらをロードしないでください。 JSファイルの1つのセットは中に置かれたカレンダーのためのものです:

app/assets/javascripts/calendar 

だから私のマニフェストが(とカレンダーのサブディレクトリを除外)のみトップディレクトリが含まれるように設定されている:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory . 

私のconfig /環境/ production.rb:ビューで

# 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 

# This following config is left over from previous Rails app, 
# so not sure if it's now unnecessary ... 
# Disable Rails's static asset server 
# In production, Apache or nginx will already do this 
config.serve_static_assets = false 

、私は手動でカレンダーファイルを含めるためにライアン・ベイツnifty_layoutを使用しています:

開発とプロダクションの両方でプリコンパイルを試しました。ドキュメントは、私がこれを行うべき場所が明確ではありませんが、プロダクションのように見えます。

そして、私はページを実行すると、私はこれを取得:

ActionView::Template::Error (calendar/date.js isn't precompiled) 

私はそれがプリコンパイルしたくありません。私はそれを手動でロードします。 (実際には、作成されたメインapplication.js以外のファイルでプリコンパイルしても問題ありませんが、その方法はわかりません)

解決方法はありますか?

ありがとうございます!

答えて

4

OKこれはどのように動作するのか分かりませんでしたが、と思って私はそれを理解しました。

手動そうのような設定/環境/ production.rbにロードするファイルを追加します。

config.assets.precompile += %w(calendar/*.js jquery_calendar/*.css) 

私はこれがちょうどapplication.jsとapplication.cssにそれらを折り畳んだが、どうやらないと思いました - 個々のファイルとしてコンパイルします。あなたは伝統的に(この場合には、nifty_layout使用)と同じよう

その後、あなたはファイルを呼び出すことができます。

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js"