最初のページの読み込み後にサーバーから別の js ファイルを読み込む jQuery プラグインを使用しています。Rails 3.1 ではすべての js アセットが連結され、パブリック ディレクトリは js アセットの提供に使用されないため、このファイルを参照するにはどうすればよいですか? どこに置くの?
2 に答える
Sprockets ロード パス内のすべてのアセットは、実行時にアクセスできます。Railsコンソールでロードパスを確認できます
Rails.application.config.assets.paths
イニシャライザにロード パスを追加できます。
Rails.application.config.assets.paths << your_load_path
デフォルトでは、apps/assets/ および vendor/assets/ 内のすべてのアセットが自動的に読み込まれます。これらのアセットはディレクトリ内に配置する必要があります。assets/ ディレクトリ自体のファイルは読み込まれません。
http://mydomain.com/assets/myscripts/hello.jsapps/assets/javascripts/myscripts/hello.js
にアクセスして、 にあるアセットをロードできます。
連結は別の問題です。スプロケットは、スプロケットrequire
とprovide
ディレクティブを使用して指定したアセットのロード パスを検索し、それらから連結ファイルを構築します。
これを達成する簡単な方法はないようです。Rails 3.1 内では、JavaScript ファイルと CSS ファイルの両方が単一のファイルに連結され、ブラウザーに送信されるようになりました。これは、Sprocketsライブラリを使用して実現されます。
これを実現するメカニズムには、./app/assets/javascripts/application.js ファイルの解析と、関連ファイルの場所を Sprockets に伝える Sprockets ディレクティブの検索が含まれます。
新しく生成された Rails アプリケーション内のまったく新しい application.js ファイルは次のようになります。
// FIXME: Tell people that this is a manifest file, real code should go into discrete files
// FIXME: Tell people how Sprockets and CoffeeScript works
//
//= require jquery
//= require jquery_ujs
//= require_tree .
これらは JavaScript へのコメントのように見えますが、Sprockets によって、クライアントに配信される単一の application.js を構築する方法を指示するディレクティブとして扱われます。require_tree
おそらく、JavaScript ファイルに追加されている行であると推測できます。
Sprockets ディレクティブに関する豊富なドキュメントはないようです。ただし、ソースコードは十分に文書化されており、使用可能なディレクティブについて非常によく説明されています。
このrequire_tree
ディレクティブは、app/assets/javascripts ディレクトリ内のすべてのファイルを再帰的に含めます。したがって、サブディレクトリを作成し、そこに含めたくないファイルを配置することで、目的を達成できます。その後、 に変更できrequire_tree
ますrequire_path
。
これに代わる方法は、require filename
必要な JavaScript ファイルごとに使用して、Sprockets に含まれるファイルを個別に手動で管理することです。