【问题标题】:Can only make one request to server without failure只能向服务器发出一个请求而不会失败
【发布时间】:2011-04-21 06:41:45
【问题描述】:

我有一个 Rails 应用程序最近表现得很奇怪。如果我启动服务器,我可以做一个成功的请求,但下一个以失败告终(完全相同的请求)。这并非适用于所有页面,但适用于大多数具有动态内容的页面。当失败发生时,我得到这个错误:

Processing StartpageController#index (for 127.0.0.1 at 2010-10-05 13:54:16) [GET]
  Parameters: {"action"=>"index", "controller"=>"startpage"}
Rendering template within layouts/application
Rendering startpage/index
  Complaint Columns (1.9ms)   SHOW FIELDS FROM `complaints`

ActionView::TemplateError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.include?) on line #9 of app/views/complaints/_recent.html.erb:
6:   <% for complaint in @recent %>
7:     <li>
8:       <div class="span-2">
9:         <%= avatar complaint.user %>
10:       </div>
11:       <div class="span-9 last">
12:         <% bubble do %>

    app/views/complaints/_recent.html.erb:9
    app/views/complaints/_recent.html.erb:6:in `each'
    app/views/complaints/_recent.html.erb:6
    app/views/startpage/index.html.erb:9

Rendered rescues/_trace (173.4ms)
Rendered rescues/_request_and_response (24.0ms)
Rendering rescues/layout (200)
Tue Oct 05 13:54:17 +0200 2010: Read error: #<NameError: cannot remove Object::ClassMethods>
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:629:in `remove_const'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:629:in `remove_constant'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:629:in `instance_eval'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:629:in `remove_constant'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:476:in `remove_unloadable_constants!'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:476:in `each'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:476:in `remove_unloadable_constants!'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:262:in `clear'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/actionpack-2.3.9/lib/action_controller/dispatcher.rb:64:in `cleanup_application'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/actionpack-2.3.9/lib/action_controller/reloader.rb:17:in `close'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/rack-1.1.0/lib/rack/handler/mongrel.rb:85:in `process'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:165:in `process_client'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:164:in `each'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:164:in `process_client'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:291:in `run'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:291:in `initialize'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:291:in `new'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:291:in `run'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:274:in `initialize'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:274:in `new'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/mongrel-1.2.0.pre2/lib/mongrel.rb:274:in `run'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/rack-1.1.0/lib/rack/handler/mongrel.rb:38:in `run'
/Users/rejeep/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/commands/server.rb:111
/Users/rejeep/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/Users/rejeep/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
./script/server:3

include? 方法没有在我的代码中的任何地方使用,所以我不知道它来自哪里。

我尝试过很多不同版本的 Ruby、Rails、Mongrel、Passenger、Webrick,...目前我正在使用:

  • 红宝石:REE 1.8.7
  • 导轨:2.3.9
  • 杂种:1.2.0.pre2

编辑: 应该说问题只出现在开发模式。

【问题讨论】:

  • 你的头像助手方法是什么?里面失败了。
  • 这实际上并不重要。我可以删除该方法中的所有代码,但仍然会遇到完全相同的问题!
  • 看起来类重新加载有点颠簸。再试一次生产环境(这不是真正的解决方案,只是一个寻找错误的步骤)。
  • 在开发中设置 config.cache_classes 为 true 可以解决问题...
  • 看起来真正的问题是读取错误:#。现在至于 为什么 它不能这样做......我不确定。

标签: ruby-on-rails ruby mongrel


【解决方案1】:

请参阅此帖子以获取解决方案:When working with gems in Rails, what does 'cannot remove Object::ClassMethods' stem from?

在我的情况下,问题的发生是因为我在 lib 中包含了一个具有通用代码的模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2011-02-20
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多