我有一个客户在轨道上运行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'
答案 0 :(得分:2)
我怀疑您的问题是Event
没有匹配featured.newest
,这意味着event
为零。由于nil#has_image?
不是可用方法,因此抛出NoMethodError,最终在服务器上看到500错误。
事件查询属于您的控制器,您的输出应该有一个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 %>
答案 1 :(得分:1)
将<% if event.has_image? %>
更改为:
<% if event && event.has_image? %>
...或者在Ruby&gt; = 2.3
<% if event&.has_image? %>