0

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

以下是日志片段

日志说代码有错误,没关系,但是为什么要这么长时间才能响应(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 内存

4

3 回答 3

0

终于找到了这么长时间回复的原因。工作人员根据 cron 表达式定期运行。此特定问题的根本原因是作业的一个 cron 表达式输入错误。这就是为什么在执行“distance_of_time_in_words_to_now”时花费了太多时间的原因。

于 2013-01-02T04:43:32.777 回答
0

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

如果你不能更新到 3.1.5,修复很简单(参见修复它的提交)——你只需要猴子补丁检查:

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

我曾经将它转储到初始化程序中。还有一个 gem (safe_inspect) 声称可以为您执行此操作,尽管我从未尝试过。

于 2012-12-26T09:35:19.273 回答
0

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

于 2014-06-16T13:11:32.137 回答