新手问题 本地 development 刷新页面报 500 错误

vincent178 · 2013年05月15日 · 最后由 Vincent178 回复于 2013年05月15日 · 2928 次阅读

求助: 今天遇到一个很奇怪的问题,在 Development 模式中,刷新页面会报 nilclass 错误,然后重启 server 后一切正常。

下面是 log

Started GET "/en/jobs/Instrument-Software-Architect/JHQ7GJ5XFBJH0YL9T9C" for 127.0.0.1 at 2013-05-15 11:04:21 +0800
Processing by CbIntl::JobsController#detail as HTML
  Parameters: {"locale"=>"en", "title"=>"Instrument-Software-Architect", "did"=>"JHQ7GJ5XFBJH0YL9T9C"}
IP: 127.0.0.1
  Rendered cb_intl/jobs/detail.html.erb within layouts/cb_intl/application (47.0ms)
Completed 500 Internal Server Error in 117ms

trace 信息没有

#1 楼 @williamherry 怎么 trace? 在CbIntl::JobsController#detail这个 action 中加 debug 吗

JobsController 的 detail 里 你没有做分支 每次刷新都会运行请求

#3 楼 @ChanceDoor 奇怪的是不是每次刷新都会报错,可能会在 10 次正常的刷新后报错。。。

#4 楼 @Vincent178 那大概就是请求把资源占掉了 500 Internal Server Error 就是服务器无响应

#5 楼 @ChanceDoor 请求占掉了什么资源呢?

#6 楼 @Vincent178 那就要看你的代码了 不要让它每次刷新都发送请求

#7 楼 @ChanceDoor 这个action实际就是调用一个 api,api 返回结果我都做了缓存了,不会每次都发送请求呀,log 显示应该已经走到render这一步了

#8 楼 @Vincent178 那是不是缓存没释放?

#9 楼 @ChanceDoor 这个我就不懂了。。。我刚把 tm/cache 文件都删了,没起作用

erb 里面写了什么...

#11 楼 @ChanceDoor 代码公司的,不大方便贴。我在action中用了binding.pry,刷新后都没有进 debug,然后重启 server 后又好了。。。我去

#12 楼 @zj0713001 erb 没什么呀,昨天还好好的。

#13 楼 @Vincent178 重启就好了肯定是资源不足导致的 代码你可以抽象一下发上来 detail.html.erb 和 layouts/cb_intl/application.html.erb里没问题吗?你是不是每次刷新都会调用那个API 然后进行缓存 detail 页面从缓存里读取结果?

要是昨天还好好的 那就想想改动了哪些地方 加了 action?

#15 楼 @ChanceDoor tig 中显示的结果 action中改变,类似的改了 3 个地方

       respond_to do |format|
-        format.js
+        format.js { @translation = t(:jd_email_capture) }
       end

view中的改变

   <h5><%= t :jd_emailjob_label%></h5>
   <p><%= @job.job_title %></p>
   <div id='emailFeedBack'>
-    <%= form_tag main_app.email_this_job_path(:did=>@job.did), :method => "post", :remote => true do %>
+    <%= form_tag main_app.email_this_job_path, :method => "post", :remote => true do %>

       <%= content_tag :label, t(:jd_email_to) %>
       <%= text_field_tag :email %>

email_capture.js.erb中的改变

-$(".popover-content .span9 form").html("<p>订阅成功!您可以收到相关职位推荐了。同时我们也为您自动注册了一个账号,请在您的邮箱查看账号信息。 </p>");
+var text = "<p>" + "<%= @translation %>" + "</p>"
+$(".popover-content .span9 p").hide();
+$(".popover-content .span9 form").html(text);

#16 楼 @ChanceDoor 现在都无法重现那个 error 了,怎么刷新都不出 nilclass 了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号