簡體   English   中英

在localhost上可以正常工作,但在heroku上不能正常工作

[英]Works fine on localhost, but not on heroku

嘗試訪問我的帖子時,heroku出現問題。 日志說:

Rendered posts/index.html.erb within layouts/application (920.6ms)
2015-11-06T09:39:41.716328+00:00 app[web.1]: Completed 500 Internal Server Error in 936ms (ActiveRecord: 42.1ms)
2015-11-06T09:39:41.720223+00:00 app[web.1]: 
2015-11-06T09:39:41.720226+00:00 app[web.1]: ActionView::Template::Error (undefined method `email' for nil:NilClass):
2015-11-06T09:39:41.720227+00:00 app[web.1]:     22:            <dt> <%= post.body %> </dt>
2015-11-06T09:39:41.720227+00:00 app[web.1]:     23:             <dd><%= post.tags %> </dd>
2015-11-06T09:39:41.720228+00:00 app[web.1]:     24:          </dl>
2015-11-06T09:39:41.720229+00:00 app[web.1]:     25:          <%= gravatar_for post.user, size: 40%> Created by <b><%= post.user.name if post.user %></b>
2015-11-06T09:39:41.720229+00:00 app[web.1]:     26:         </td>
2015-11-06T09:39:41.720230+00:00 app[web.1]:     27: 
2015-11-06T09:39:41.720231+00:00 app[web.1]:     28:     <div>
2015-11-06T09:39:41.720231+00:00 app[web.1]:   app/helpers/users_helper.rb:3:in `gravatar_for'

localhos:3000/posts上運行良好,該錯誤僅出現在heroku上。 我在開發和生產中都使用PostgreSQL。

這是我的routes.rb:

  resources :users
  resources :sessions, only: [:new, :create, :destroy]
  resources :posts
 root 'posts#index'
   match '/signup', to: 'users#new',         via: 'get'
   match '/signin', to: 'sessions#new',      via: 'get'
   match '/signout', to: 'sessions#destroy', via: 'delete'

我的帖子的一部分#index:

<div class="show_posts">
<table>
    <% @posts.each do |post| %>

        <td>
         <dl> <%= post.title %>
           <dt> <%= post.body %> </dt>
            <dd><%= post.tags %> </dd>
         </dl>
         <%= gravatar_for post.user, size: 40%> Created by <b><%= post.user.name if post.user %></b>
        </td>

users_helper.rb:

module UsersHelper
  def gravatar_for(user, options = { size: 50 })
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    size = options[:size]
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end    

任何想法如何解決問題?

問題出在gravatar_for內部,您在此處調用...

Digest::MD5::hexdigest(user.email.downcase)

所需的user對象不存在。

當您引用以下內容時,這是由您的posts#index模型引起的

<%= gravatar_for post.user, size: 40%> Created by <b><%= post.user.name if post.user %>

如評論中所建議,這可能是由於您沒有與post相關的user對象。

立即修復將使用一些條件邏輯來確定user是否存在(您已經在執行此操作,但僅用於post.user.name輸出):

<% if post.user %>
    <%= gravatar_for post.user, size: 40 %> Created by <b><%= post.user.name %>
<% end %>

或者,您可能希望通過驗證來確定是否設置了關聯的對象,以使所有帖子都擁有一個用戶:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :posts, inverse_of: :user
end

#app/models/post.rb
class Post < ActiveRecord::Base
   belongs_to :user, inverse_of: :posts
   validates :user, present: true
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM