0

ここでAssets Pipelineガイドを読んで試しました: http://guides.rubyonrails.org/asset_pipeline.html

...手動で作成および更新されたリストに特定のファイルを含める方法を示します。または、ディレクトリ (または複数のディレクトリ) を含めるが、Rails に通常含まれる他のすべてのファイルを除外する Proc です。

ファイルのフォルダーを通常含まれているファイルに += したい。

私は答えを試しました:

app/assets 内のすべての CSS および JS ファイルを処理する Rails の config.assets.precompile 設定

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

特定のサブフォルダーの rails config.assets.precompile

...最後は解決策を示しているようです:

config.assets.precompile += ["*external/calendars*"]

私が変更したもの:

    config.assets.precompile += %w["*javascript*"]

または config.assets.precompile += [" javascript "] (および約 20 の他のバリエーション。)

... 私の assets/javascript フォルダーを取得します。しかし、「...isn't precompiled」というエラーが示すように、ディレクトリは含まれていません。

3番目の方法は、それを与えることです

 config.assets.precompile += %w( *.js )

...これは機能しますが、非常に長いコンパイルにつながります.どこでも、発見できるすべてのJSファイルを見つけると思います.

言うまでもなく、手動で更新されたリストにファイルを追加することは、進行中のアプリケーションには適していません。また、Rails が排他的な Proc でプリコンパイルした未知のものを失うこともありません (ただし、ドキュメント内の例は 2 つだけです)。 .

フォルダを "+-=" にする単純なワイルドカード ソリューションはありませんか? または、この「機能」をオフにして、ビューごとに JS を指定しても、Heroku で動作させることができますか?

----編集 - 深く見れば見るほど、不合理になります。基本的に、解決策は「Rails が開発モードで A-OK を見つけたものをすべてロードする」ことです。それでも、そのようなオプションは存在しませんか?

プリコンパイル行を参照する production.rb ファイルには、次のように記載されています。

  # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)

...そしてapplication.jsには次のものがあります:

//= require_tree .

...そのディレクトリの下のすべてのファイルをロードする必要がありますが、そうではありません。なんで?深く掘り下げるほど、これは意味がなくなります。

4

1 に答える 1

1

複数の CSS/JS ファイルを処理してアセット パイプラインに追加する場合の良い方法は、それらのファイルの新しいマニフェストを単純に作成することです。

いくつかの JS ファイルがlib/assets/javascripts/external/calendarsあり、アセット パイプラインを介してそれらをロードしたいとします。

index.js次の内容のマニフェスト ファイルを作成します。

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require_tree .

このようにして、ディレクティブexternal/calendarsのおかげで、ディレクトリに追加するすべての JS ファイルがデフォルトで含まれます。require_tree .

ここで、app/assets/javascripts/application.jsファイルに次の行を追加します。

//= require calendars

これにより、「カレンダーのマニフェスト インデックス ファイル」が検出され、依存するすべての JS ファイルが読み込まれます。アセット パイプラインに何も追加する必要はありません。そのまま機能します。

于 2013-08-16T07:31:02.193 に答える