Rails过程需要很长时间才能响应

时间:2012-12-25 10:50:01

标签: ruby-on-rails-3 apache passenger

当我向rails服务器发送GET请求时,响应时间太长(29分钟)

以下是日志摘要

Log说代码中有错误,没关系,但是为什么需要这么长时间来回复(1723579 ms)我无法找到任何这种行为的原因。以前当服务器工作正常时,这个js请求只需要9毫秒来响应。但突然间它开始表现得像这样。我应该如何调试应用程序以跟踪此类意外行为的根本原因。

        Started GET "/my-server/jobs/workers?_=1356363515400" for 27*.*.*.* at 2012-12-24 21:08:35 +0530
    ActionView::Template::Error ():
             1: <% @jobs.each do |job| %>
             2:   $('#cron_<%= job.id %>').attr('data-content', '<%= distance_of_time_in_words_to_now(job.next_fire_info, true) %>');
             3: <% end %>
             4: 
             5: <% @workers.each do |worker| %>
           app/models/job.rb:16:in `next_fire_info'
           app/views/jobs/workers.js.erb:2:in `block in _app_views_jobs_workers_js_erb__101155230_81985760'
           app/views/jobs/workers.js.erb:1:in `_app_views_jobs_workers_js_erb__101155230_81985760'


 Rendered jobs/workers.js.erb (1718348.7ms)

 Completed 500 Internal Server Error in 1723579ms

我在Rails 3.1.3上, Ruby 1.9.3p194, MongoDB版本v2.2.0,pdfile版本4.5, 32位Ubuntu(12.04),2 gb ram

3 个答案:

答案 0 :(得分:0)

3.1.5之前的rails 3.1版本有一个错误,当从视图中引发异常时,需要很长时间才能生成异常消息。

如果您无法更新到3.1.5,修复非常简单(请参阅修复它的commit) - 您只需要修补补丁:

module ActionDispatch
    module Routing
        module RouteSet
          alias to_s inspect 
        end
    end
end

我曾经在初始化程序中转储它。还有一个gem(safe_inspect)声称为你做这个,虽然我从来没有尝试过。

答案 1 :(得分:0)

最后我发现了花了这么长时间回应的原因。工作人员基于cron表达式定期运行。这个特定问题的原因是错误地输入了一个cron表达式。这就是为什么在执行“distance_of_time_in_words_to_now”时花费了太多时间。

答案 2 :(得分:0)

我有类似的问题,它是由身份验证引起的,所以这只是为了记录,如果有人将来有同样的问题。服务器没有让用户进入,然后重定向到受限制的页面等等。