首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails。大型vendor.js?

Rails。大型vendor.js?
EN

Stack Overflow用户
提问于 2013-03-03 18:12:40
回答 1查看 335关注 0票数 0

我的rails项目中有一个vendor.js文件,其中包含几个供应商的库,在添加了一些新的库之后,我在开发环境中遇到了这个问题

代码语言:javascript
复制
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:

代码语言:javascript
复制
//= 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

更新:我已经在每个环境(developemnt.rb,production.rb和test.rb)中明确地设置了cache_store,这解决了这个问题,直到我打开Google Chrome,这个问题再次被提出。因此,在FF中,一切运行正常,Chrome无法加载vendor.js (相同的服务器实例(瘦),并且在同一时间用于两个浏览器)

ff请求的日志:

代码语言:javascript
复制
Cache read: http://work:3000/assets/vendor.js?
Cache read: 577d6ed0d98975b583329c312bd25667620f2497

chrome请求日志(同上):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-03-03 18:24:02

您可以考虑应用this Rails guide (2.1.2)中所述的index.js技术。尝试拆分您的大文件,并将这些部分包含在清单文件中,例如:

在您的/app/vendor/assets/javascripts中,创建一个新目录my_libraries并将部件放入其中。然后,在同一目录中正常创建index.js清单文件和包含文件:

代码语言:javascript
复制
//= require file1
//= require file2

在你的application.js中:

代码语言:javascript
复制
//= require my_libraries

编辑:一种解决方案是:在你的/vendor/ext中(正确的路径是app/vendor/assets/javascripts/ext,如果你有一个像/vendor/ext这样的路径,它将不清楚它是作为资产目录来管理的,也不清楚你包含什么资产- js或css)来创建包含内容的index.js

代码语言:javascript
复制
//= require_tree .

application.js中:

代码语言:javascript
复制
//= require ext

然后,您应该从application.js清单中删除对vendor目录的所有引用。另一个错误是在清单中包含带有.js前缀的文件。在清单文件中,您应该声明不带前缀的包含项。

查看资产管道的文档,解释require_tree的用法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15184590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档