4

私はrequirejs-rails gemをさまざまなサードパーティのjavascriptとともに使用しています。開発では、これはすべて機能しているようです...アセットをプリコンパイルしていても、ステージング/プロダクション(heroku)ではアセットが見つかりません。

例として jQuery を取り上げます (jquery-rails gem を使用)。もしそうならherokuコンソールから

Rails.application.assets.find_asset('jquery.min')アセットを見つけます (/app/vendor/bundle/ruby/1.9.1/gems/jquery-rails-2.1.1/vendor/assets/javascripts/jquery.min.js")。

しかし、それを参照しようとするとdomain.com/assets/jquery.min.js、404 が表示されます。

私のrequirejs-rails構成は次のとおりです。

shim:
  jquery:
    exports: '$'
  jquery-ujs:
    - jquery
paths:
  jquery: jquery.min
  jquery-ujs: jquery_ujs

私のapplication.js.coffeeには

require ['jquery', 'jquery-ujs'], ($) ->
  // ...
4

2 に答える 2

3

機能する方法requirejs-rails(および実際には requirejs の r.js) は、(コード内のパスまたはコード内の実際の定義呼び出しを介して) 知っているすべての JavaScript ファイルをrequirejs.yml1 つの大きなファイルにコンパイルし、それを醜くし、圧縮し、キャッシュバスト (名前にダイジェストを含めることにより)。したがって、/assets/views/my_view.jshttp を介して dev でアクセスできるという名前のファイルがある場合、本番環境にはもう存在しません (これは の一部であるためapplication.js)。

あなたの場合application-<digest>.js、実稼働環境 (提供されたアプリケーション ページの html を見ることで実際のダイジェストを取得できます) を見ると、jquery が既にそこに含まれていることがわかります (ライセンス コメントを確認できます)。

したがって、ファイルはそこにあり、の一部として正しくapplication-<digest>.js提供されます。本番環境では、直接利用できることに依存するべきではありません。アセット パイプラインと requirejs-rails プラグインの要点は、すべてのファイルを 1 つの縮小された圧縮ファイルにコンパイルして、ページのパフォーマンスを向上させることです。

于 2012-10-01T18:14:09.753 に答える
0

私はrequirejsを使用していませんRails.application.assets.pathsが、アセットがそこにあることを確認しましたか? またconfig.action_controller.asset_host、現在の環境で適切に設定されている ことを確認してください

于 2012-09-26T14:00:42.160 に答える