ruby-on-rails - Ruby on Rails-错误500

标签 ruby-on-rails ruby error-handling

我有一个在轨道上运行ruby的客户端,但是不幸的是,我不是100%相信Ruby ...今天无论如何,他们的网站在浏览该网站时始终返回错误500。

查看error_log,我可以看到的是以下内容:

[ 2015-11-16 20:16:45.5125 11424/7fcdb8049700 Pool2/SmartSpawner.h:298 ]: Preloader for /home/rails/production started on PID 22379, listening on unix:/tmp/p$
App 22504 stdout:
App 22950 stdout:
App 22950 stderr: /home/rails/.rvm/gems/ruby-1.9.3-p484/gems/tlsmail-0.0.1/lib/net/smtp.rb:806: warning: already initialized constant SMTPSession
App 22950 stderr: /home/rails/.rvm/gems/ruby-1.9.3-p484/gems/tlsmail-0.0.1/lib/net/pop.rb:687: warning: already initialized constant POP
App 22950 stderr: /home/rails/.rvm/gems/ruby-1.9.3-p484/gems/tlsmail-0.0.1/lib/net/pop.rb:688: warning: already initialized constant POPSession
App 22950 stderr: /home/rails/.rvm/gems/ruby-1.9.3-p484/gems/tlsmail-0.0.1/lib/net/pop.rb:689: warning: already initialized constant POP3Session
App 22950 stderr: /home/rails/.rvm/gems/ruby-1.9.3-p484/gems/tlsmail-0.0.1/lib/net/pop.rb:702: warning: already initialized constant APOPSession
App 22950 stdout: MultiParameterHack loaded
App 22950 stderr: [deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set$
[ 2015-11-16 20:33:27.7232 11424/7fcdb9f61700 Pool2/SmartSpawner.h:298 ]: Preloader for /home/rails/production started on PID 22950, listening on unix:/tmp/p$
App 23101 stdout:

谁能帮我这个忙?

我也可以在production.log中看到这一点:
Rendered shared/_meganav.html.erb (86.0ms)
Rendered pages/home.html.erb within layouts/application (197.9ms)
Completed 500 Internal Server Error in 278ms
** [Airbrake] Success: Net::HTTPOK
** [Airbrake] Environment Info: [Ruby: 1.9.3] [Rails: 3.0.19] [Env: production]
** [Airbrake] Response from Airbrake:
UUID: 1555278126118213905
URL:  https://airbrake.io/locate/1555278126118213905

ActionView::Template::Error (undefined method `has_image?' for nil:NilClass):
    269:                           <% event = Event.featured.newest.first %>
    270:
    271:              <article class="featured-event">
    272:                <% if event.has_image? %>
    273:                <div class="image"><span></span><%= link_to(image_tag(event.image.expiring_url(:featured)), event_path(event)) %></div>
    274:                <% end %>
    275:                  <div class="text">
  app/views/shared/_meganav.html.erb:272:in `_app_views_shared__meganav_html_erb__3450254428998327647_59198060__3999436880091196355'
  app/views/layouts/application.html.erb:223:in `_app_views_layouts_application_html_erb__1905251585106566541_49797400_3662579409495417543'

最佳答案

我怀疑您的问题是没有与Event匹配的featured.newest,这意味着event为nil。由于nil#has_image?不是可用的方法,因此抛出NoMethodError,并且最终在服务器上看到500错误。

事件查询属于您的 Controller ,并且您的输出应使用nil-guard来确保不会发生这种情况。例如:

# app/controllers/pages_controller.rb
def index
  @event = Event.featured.newest.first
end

# app/views/pages/home.html.erb
<% if @event.present? %>
  <article class="featured-event">
  ...
  </article>
<% end %>

关于ruby-on-rails - Ruby on Rails-错误500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744232/

相关文章:

mysql - Ruby on Rails 数据库接口(interface)

ruby-on-rails - 更改 Rails 5 中的默认本地主机端口

ruby - 如何使用 Mechanize 抓取电子邮件地址而不将 `[email protected]` 作为值

mysql - 使用 id 从表中检索值

python - AttributeError : '_tkinter.tkapp' object has no attribute 'text' in tkinter

使用迭代查找最大值和最小值时出现 Python TypeError

ruby-on-rails - 覆盖 Spree Commerce 的 Bootstrap 变量

sql - 是否可以在 Rails 迁移中使用外部 SQL 文件?

ruby - 在 Sublime Text 3 中更改 Ruby 的自动缩进

php - PHP未写入错误日志