2017-11-21 1 views
2

프로덕션 환경에있는 Ruby on Rails 응용 프로그램을 가지고 있으며 블로그 페이지에만 500 오류가 발생합니다.Symbol 또는 String의 예상 문제를 해결하려면 어떻게해야합니까? nilClass가 주어 졌습니까?

<% if logged_in?(:site_admin) %> 
    <nav class="breadcrumb blogcrumb"> 
     <%= link_to fa_icon('file-text'), toggle_status_blog_path(blog), style: blog_status_color(blog) %> 
     <%= link_to fa_icon('pencil-square-o'), edit_blog_path(blog) %> 
     <%= link_to fa_icon('trash'), blog, method: :delete, data: { confirm: 'Are you sure?' } %> 
    </nav> 
<% end %> 

내가하지 않았다, 여기에 구문 오류가 표시되지 않습니다

017-11-21T19:04:10.618353+00:00 app[web.1]: D, [2017-11-21T19:04:10.618254 #4] DEBUG -- : [9091d983-bc39-4f64-b86e-c388e3893072] (0.9ms) SELECT COUNT(*) FROM "blogs" 
2017-11-21T19:04:10.628750+00:00 app[web.1]: D, [2017-11-21T19:04:10.628603 #4] DEBUG -- : [9091d983-bc39-4f64-b86e-c388e3893072] Blog Load (1.5ms) SELECT "blogs".* FROM "blogs" ORDER BY created_at DESC LIMIT $1 OFFSET $2 [["LIMIT", 5], ["OFFSET", 0]] 
2017-11-21T19:04:10.631373+00:00 app[web.1]: I, [2017-11-21T19:04:10.631297 #4] INFO -- : [9091d983-bc39-4f64-b86e-c388e3893072] Rendered blogs/_admin_actions.html.erb (0.9ms) 
2017-11-21T19:04:10.632644+00:00 app[web.1]: I, [2017-11-21T19:04:10.632567 #4] INFO -- : [9091d983-bc39-4f64-b86e-c388e3893072] Rendered collection of blogs/_blog.html.erb [5 times] (3.1ms) 
2017-11-21T19:04:10.632805+00:00 app[web.1]: I, [2017-11-21T19:04:10.632739 #4] INFO -- : [9091d983-bc39-4f64-b86e-c388e3893072] Rendered blogs/index.html.erb within layouts/blog (16.1ms) 
2017-11-21T19:04:10.633090+00:00 app[web.1]: I, [2017-11-21T19:04:10.633020 #4] INFO -- : [9091d983-bc39-4f64-b86e-c388e3893072] Completed 500 Internal Server Error in 24ms (ActiveRecord: 3.9ms) 
2017-11-21T19:04:10.634643+00:00 app[web.1]: F, [2017-11-21T19:04:10.634573 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072] 
2017-11-21T19:04:10.634747+00:00 app[web.1]: F, [2017-11-21T19:04:10.634675 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072] ActionView::Template::Error (Symbol or String expected, but NilClass given.): 
2017-11-21T19:04:10.635079+00:00 app[web.1]: F, [2017-11-21T19:04:10.635014 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072]  4: 
2017-11-21T19:04:10.635081+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  5:  <%= render partial: 'blogs/admin_actions', locals: {blog: blog} %> 
2017-11-21T19:04:10.635082+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  6: 
2017-11-21T19:04:10.635083+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  7:  <p><%= markdown blog.body %></p> 
2017-11-21T19:04:10.635083+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  8: 
2017-11-21T19:04:10.635084+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  9: </div><!-- /.blog-post --> 
2017-11-21T19:04:10.635166+00:00 app[web.1]: F, [2017-11-21T19:04:10.635106 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072] 
2017-11-21T19:04:10.635268+00:00 app[web.1]: F, [2017-11-21T19:04:10.635198 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072] app/helpers/blogs_helper.rb:8:in `block_code' 
2017-11-21T19:04:10.635270+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072] app/helpers/blogs_helper.rb:23:in `render' 
2017-11-21T19:04:10.635271+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072] app/helpers/blogs_helper.rb:23:in `markdown' 
2017-11-21T19:04:10.635272+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072] app/views/blogs/_blog.html.erb:7:in `_app_views_blogs__blog_html_erb___2264044015187904428_50852620' 
2017-11-21T19:04:10.635273+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072] app/views/blogs/index.html.erb:5:in `_app_views_blogs_index_html_erb__3065153368905289675_52150720' 
2017-11-21T19:04:10.806557+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=dancortes-portfolio.herokuapp.com request_id=4d778605-235a-4a14-9d31-ab7c89f35015 fwd="69.141.168.126" dyno=web.1 connect=0ms service=1ms status=200 bytes=143 protocol=https 

동료가 _admin_actions.html.erb에 구문 오류가 있어야한다는 말씀하시기에게 Heroku 로그 파일은이 말을 심지어 이런 일이 생길 때도 코드를 터치하십시오. 처음에는 블로그 중 하나의 자격으로 인해 오류라고 생각했지만 이후 블로그를 삭제했으며 관리자로 로그인 한 경우에만 블로그 페이지 만 500 오류가 표시됩니다.

I 앱/헬퍼/blogs_helper.rb 표시하려면이 게시물을 편집 한 : 나는 올립니다과 디버깅을 구현

module BlogsHelper 
    def gravatar_helper user 
     image_tag "https://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(user.email)}", width: 60 
    end 

    class CodeRayify < Redcarpet::Render::HTML 
     def block_code(code, language) 
      CodeRay.scan(code, language).div 
     end 
    end 

    def markdown(text) 
     coderayify = CodeRayify.new(filter_html: true, hard_wrap: true) 

     options = { 
      fenced_code_blocks: true, 
      no_intra_emphasis: true, 
      autolink: true, 
      lax_html_blocks: true, 
     } 

     markdown_to_html = Redcarpet::Markdown.new(coderayify, options) 
     markdown_to_html.render(text).html_safe 
    end 

    def blog_status_color blog 
     'color: red;' if blog.draft? 
    end 
end 

를하고이 결과였다 : binding.pry으로 다음

3:  <p class="blog-post-meta">Published <%= distance_of_time_in_words(blog.created_at, Time.now) %> ago</a></p> 
    4: 
    5:  <%= render partial: 'blogs/admin_actions', locals: {blog: blog} %> 
    6: 
    7:  <% binding.pry %> 
=> 8: 
    9:  <p><%= markdown blog.body %></p> 
    10: 
    11: </div><!-- /.blog-post --> 

[1] pry(#<#<Class:0x007fbc007b6880>>)> blog 
=> #<Blog:0x007fbc0b4d86d0 
id: 10, 
title: "My Blog Post 9", 
body: 
    "Gluten-free pug cloud bread raclette.\r\n\t\tSucculents intelligentsia banjo, selfies pork\r\n\t\tbelly mixtape selvage hexagon DIY try-hard\r\n\t\tdistillery 90's art party kombucha bicycle\r\n\t\trights. **Pour-over fashion** axe poutine tumblr 3\r\n\t\twolf moon franzen, fam plaid bespoke ethical\r\n\t\tramps post-ironic ugh dreamcatcher fanny pack.\r\n\t\tYuccie salvia unicorn, yr viral kogi air plant\r\n\t\tthundercats sartorial kickstarter prism blog\r\n\t\tsubway tile ugh. Kinfolk kogi VHS, paleo narwhal\r\n\t\tshabby chic man braid flannel. Selfies stumptown\r\n\t\tvenmo copper mug tousled four dollar toast.\r\n\t\tAffogato enamel pin vape whatever.", 
created_at: Mon, 02 Oct 2017 19:38:05 UTC +00:00, 
updated_at: Wed, 04 Oct 2017 13:20:53 UTC +00:00, 
slug: "my-blog-post-9", 
status: "draft", 
topic_id: 3> 
[2] pry(#<#<Class:0x007fbc007b6880>>)> params 
=> <ActionController::Parameters {"controller"=>"blogs", "action"=>"index"} permitted: false> 

blogs_controller.rb의 쇼 동작 내부 :

3:  <p class="blog-post-meta">Published <%= distance_of_time_in_words(blog.created_at, Time.now) %> ago</a></p> 
    4: 
    5:  <%= render partial: 'blogs/admin_actions', locals: {blog: blog} %> 
    6: 
    7:  <p><%= markdown blog.body %></p> 
=> 8: 
    9: </div><!-- /.blog-post --> 

[1] pry(#<#<Class:0x007fbc007b6880>>)> @blog 
=> nil 

그렇다면 블로그가 설정되지 않았습니까?

다음, 여기 binding.pry을 배치 시도 :

class BlogsController < ApplicationController 
    before_action :set_blog, only: [:index, :show, :edit, :update, :destroy, :toggle_status] 
    before_action :set_sidebar_topics, except: [:update, :create, :destroy, :toggle_status] 
    layout "blog" 
    access all: [:show, :index], user: {except: [:destroy, :new, :create, :update, :edit, :toggle_status]}, site_admin: :all 

을 지금 얻을 : 문제가 index 액션에 있지만

def index 
    binding.pry 
    if logged_in?(:site_admin) 
     @blogs = Blog.recent.page(params[:page]).per(5) 
    else 
     @blogs = Blog.published.recent.page(params[:page]).per(5) 
    end 
    @page_title = "Portfolio Blog" 
    end 

확실하지 만약 내가 before_action에 인덱스 작업을 추가하기로 결정 404 오류, 진술 :

ActiveRecord::RecordNotFound (Couldn't find Blog without an ID): 

그래서 나는 당신과 확인하고 싶다. 내가 여기의 야구장에있는 것처럼 보이는지 보아라.

+0

스택 추적은 blogs_helper.rb에 문제가 있음을 나타냅니다. 그 파일에는 무엇이 들어 있습니까? 파일을 표시하려면 답을 편집하십시오. – moveson

+0

코드를 더 이상 보지 않고도 말하기는 어렵지만 부분에서 줄을 하나씩 제거하여 어떤 줄이 오류인지 알려줄 수 있습니다. – Brian

+1

'blog.body'는 문자열 값이고'nil'이 아닌 것이 확실합니까? 메소드에 유효한 데이터를 전달하도록'mark.blog.body' 호출 바로 전에'binding.pry'를 넣을 것입니다. – anothermh

답변

1

이이 pry을 활용하여 해결할 수없는 경우, 다음 blogs_helper.rb에

2017-11-21T19:04:10.635268+00:00 app[web.1]: F, [2017-11-21T19:04:10.635198 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072] app/helpers/blogs_helper.rb:8:in `block_code' 

을 주석 라인 8의 코드도 코드로 문제를 나타내는 스택 트레이스를 살펴 여기에 표시 : 제거의 과정을 통해

2017-11-21T19:04:10.634747+00:00 app[web.1]: F, [2017-11-21T19:04:10.634675 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072] ActionView::Template::Error (Symbol or String expected, but NilClass given.): 
2017-11-21T19:04:10.635079+00:00 app[web.1]: F, [2017-11-21T19:04:10.635014 #4] FATAL -- : [9091d983-bc39-4f64-b86e-c388e3893072]  4: 
2017-11-21T19:04:10.635081+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  5:  <%= render partial: 'blogs/admin_actions', locals: {blog: blog} %> 
2017-11-21T19:04:10.635082+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  6: 
2017-11-21T19:04:10.635083+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  7:  <p><%= markdown blog.body %></p> 
2017-11-21T19:04:10.635083+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  8: 
2017-11-21T19:04:10.635084+00:00 app[web.1]: [9091d983-bc39-4f64-b86e-c388e3893072]  9: </div><!-- /.blog-post --> 

을 코드를 주석을 통해, 당신은 당신의 코드로 문제를 좁힐 수 있어야합니다.

다른 말로하면 pry이 작동하지 않는 것처럼 보였으므로 다음 단계는이를 해결하기 위해 수동으로 델타 디버깅을 구현하는 것입니다. 코드의 어떤 부분이 실패의 원인이되는지 알아낼 때까지 기본적으로 코드 덩어리를 주석 처리합니다.

관련 문제