0

Railsプロジェクトにいくつかのベンダーライブラリを含むvendor.jsファイルがあり、いくつかの新しいライブラリを追加した後、開発環境でこの問題に直面しています。

Started GET "/assets/vendor.js" for 10.40.129.65 at 2013-03-03 14:01:24 +0400
Cache write: 0d6281da1957dd9c5e063fb636c50bd260dae5e2
Cache read: 0d6281da1957dd9c5e063fb636c50bd260dae5e2
Cache read: http://work:3000/assets/vendor.js?
Cache write: http://work:3000/assets/vendor.js?
!! Rack application returned nil body. Probably you wanted it to be an empty string?
!! Unexpected error while processing request: undefined method `each' for nil:NilClass

一部のライブラリを削除しようとすると問題が修正され、プリコンパイルされたアセットは正常に機能します。しかし、私はそれを開発で機能させたいと思っています。お願い助けて。

vendor.js:

//= require ./vendor/ext/stacktrace.js
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require twitter/bootstrap
//= require js_notifier
//= require ./vendor/ext/mustache-1.4.2
//= require ./vendor/ext/strftime
//= require ./vendor/ext/moment
//= require ./vendor/ext/langs.js
//= require ./vendor/ext/jquery.jgrowl_minimized.js
//= require ./vendor/ext/jquery-ui-1.10.0.custom.min.js
//= require ./vendor/ext/jquery-ui-sliderAccess.js
//= require ./vendor/ext/jquery-ui-timepicker-addon.js
//= require ./vendor/ext/backbone.paginator.js
//= require ./vendor/ext/jquery-deparam.min.js
//= require ./vendor/ext/select2.js
//= require_tree ./templates
//= require ./vendor/channels.js.coffee
//= require ./vendor/ext/bootstrap.switch.js
//= require ./vendor/ext/private_pub
//= require ./vendor/ext/spin.js
//= require ./vendor/ext/jquery.spin.js

Memcached+Dalliを使用しています

UPD:すべての環境(developemnt.rb、production.rb、test.rb)でcache_storeを明示的に設定しました。これにより、問題が再度発生したGoogleChromeを開くまで問題が修正されました。その結果、FFではすべてが正常に機能し、Chromeはvendor.jsの読み込みに失敗します(同じサーバーインスタンス(シン)で、両方のブラウザーで同時に)

ffリクエストのログ:

Cache read: http://work:3000/assets/vendor.js?
Cache read: 577d6ed0d98975b583329c312bd25667620f2497

Chromeリクエストのログ(上記と同じ):

Started GET "/assets/vendor.js" for 10.40.129.65 at 2013-03-03 20:37:11 +0400
Cache write: 577d6ed0d98975b583329c312bd25667620f2497
Cache read: 577d6ed0d98975b583329c312bd25667620f2497
Cache read: http://work:3000/assets/vendor.js?
Cache write: http://work:3000/assets/vendor.js?
!! Rack application returned nil body. Probably you wanted it to be an empty string?
!! Unexpected error while processing request: undefined method `each' for nil:NilClass
4

1 に答える 1

1

この Rails ガイド(2.1.2)index.jsで説明されているように、テクニックを適用することを検討してください。大きなファイルを分割して、その部分をマニフェスト ファイルに含めてみてください。次に例を示します。

/app/vendor/assets/javascriptsで、新しいディレクトリを作成し、その中my_librariesにパーツを配置します。次に、同じディレクトリにindex.jsマニフェスト ファイルを作成し、通常どおりファイルを含めます。

//= require file1
//= require file2

そしてあなたのapplication.js

//= require my_libraries

編集:1つの解決策は次のとおりです:(/vendor/ext正しいパスは ですapp/vendor/assets/javascripts/ext。パス/vendor/extが明確ではない場合、それはアセット dir として管理されることを意図しており、含めるアセットが明確ではありません-jsまたはcss) を使用index.jsしてコンテンツを作成します。

//= require_tree .

とでapplication.js

//= require ext

次に、マニフェストからvendordirへのすべての参照を削除する必要があります。application.jsもう 1 つの間違いは、マニフェストに.jsプレフィックスを付けてファイルを含めることです。マニフェスト ファイルでは、接頭辞なしで包含を記述する必要があります。

require_tree使用方法を説明しているアセット パイプラインのドキュメントを参照してください。

于 2013-03-03T10:24:01.877 に答える