2013-08-29 42 views
0

加载没有本地主机:3000的问题,但一旦部署到Heroku我收到以下错误。 RanHeroku问题,ActionView :: Template :: Error(未定义的方法名称为nil:NilClass):

heroku logs --tail 

2013-08-29T04:38:23.403690+00:00 app[web.1]: Connecting to database specified by DATABASE_URL 
2013-08-29T04:38:26.898295+00:00 app[web.1]: [2013-08-29 04:38:26] INFO WEBrick 1.3.1 
2013-08-29T04:38:26.898295+00:00 app[web.1]: [2013-08-29 04:38:26] INFO ruby 2.0.0 (2013-06-27) [x86_64-linux] 
2013-08-29T04:38:26.898634+00:00 app[web.1]: [2013-08-29 04:38:26] INFO WEBrick::HTTPServer#start: pid=2 port=11226 
2013-08-29T04:38:27.010520+00:00 heroku[web.1]: State changed from starting to up 
2013-08-29T04:38:28.496863+00:00 app[web.1]: Started GET "/" for 50.148.15.124 at 2013-08-29 04:38:28 +0000 
2013-08-29T04:38:28.642277+00:00 app[web.1]: Processing by EventsController#index as HTML 
2013-08-29T04:38:29.529140+00:00 heroku[router]: at=info method=GET path=/ host=afternoon-gorge-1648.herokuapp.com fwd="50.148.15.124" dyno=web.1 connect=5ms service=1081ms status=500 bytes=643 
2013-08-29T04:38:29.541662+00:00 app[web.1]: Rendered events/_event.html.erb (320.3ms) 
2013-08-29T04:38:29.541795+00:00 app[web.1]: Rendered events/index.html.erb within layouts/application (743.9ms) 
2013-08-29T04:38:29.542093+00:00 app[web.1]: Completed 500 Internal Server Error in 900ms 
2013-08-29T04:38:29.544607+00:00 app[web.1]: 
2013-08-29T04:38:29.544607+00:00 app[web.1]: ActionView::Template::Error (undefined method `name' for nil:NilClass): 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  3: <td><%= event.title %></td> 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  4: <td><%= event.location %></td> 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  5: <td><%= event.description %></td> 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  6: <td><strong><%= link_to event.user.name, event.user %></strong></td> 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  7: <td><%= link_to 'Show', event %></td> 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  8: <% if current_user == event.user %> 
2013-08-29T04:38:29.544607+00:00 app[web.1]:  9:  <td><%= link_to 'Edit', edit_event_path(event) %></td> 
2013-08-29T04:38:29.544607+00:00 app[web.1]: app/views/events/_event.html.erb:6:in `_app_views_events__event_html_erb___4373324357052961172_69914882818260' 
2013-08-29T04:38:29.544790+00:00 app[web.1]: app/views/events/index.html.erb:20:in `_app_views_events_index_html_erb___3028579038251132182_69914889655380' 
2013-08-29T04:38:29.544790+00:00 app[web.1]: app/controllers/events_controller.rb:9:in `index' 

我已经确认我的数据库本地和Heroku匹配。 该应用只在登录时失败。登录页面在注销时加载正常。 发生这种情况时,我添加了新的7个新的用户字段我的数据库,所有的字符串。 Ran

rake db:migrate 

本地。

heroku run rake db:migrate. 

这里是Heroku的链接:http://afternoon-gorge-1648.herokuapp.com/

很困惑,问题的症结所在。

更新:这里是事件的索引页:

<% if user_signed_in? %> 
    <div class="hero-unit"> 
    <h1>Sign up for any of the following events!</h1> 
    </div> 
    <h1>Listing events</h1> 
    <table class="table table-striped"> 
    <thead> 
     <tr> 
     <th>Image</th> 
     <th>Title</th> 
     <th>Location</th> 
     <th>Description</th> 
     <th>Posted by</th> 
     <th></th> 
     <th></th> 
     <th></th> 
     </tr> 
    </thead> 
    <tbody> 
    <%= render @events %> 
    </tbody> 
    </table> 
    <br/> 
    <%= link_to 'Add New Event', new_event_path, class: "btn btn-primary btn-large" %> 
<% else %> 
    <%= render 'pages/home' %> 
<% end %> 

调用_event.html.erb部分:

<tr> 
    <td><%= image_tag event.image(:medium) %></td> 
    <td><%= event.title %></td> 
    <td><%= event.location %></td> 
    <td><%= event.description %></td> 
    <td><strong><%= link_to event.user.name, event.user %></strong></td> 
    <td><small><%= link_to 'Show', event %></small></td> 
    <% if current_user == event.user %> 
    <td><small><%= link_to 'Edit', edit_event_path(event) %></small></td> 
    <td><small><%= link_to 'Delete', event, method: :delete, data: { confirm: 'Are you sure?' } %></small></td> 
    <% end %> 
</tr> 
+0

上面更新的代码。 – cpflores

+0

您已收到以下两个完整答案。如果您表示是否已经有效,这会很有帮助。 – zeantsoi

回答

0

您正试图调用渲染部分速记。但是,速记只能用于单数对象,但是您正尝试传递_a对象集合。相反,你通过@events需要循环,并通过每个结果event为您的本地部分:

# app/views/events/index.html.erb 
<% @events.each do |event| %>  
    <%= render :partial => 'events', :locals => {:event => event} %> 
<% end %> 

要了解更多关于为什么你调用的语法不起作用,见3.4.4传局部变量Rails Guides。基本上,_event.html.erb部分期望一个单一的对象(它通过event本地变量访问),但相反,您将它传递给多个对象的集合。所以,虽然局部变量events可用于局部,但event不是。

由于您仍然尝试访问event变量(不存在)的属性/关系,因此您收到的错误是NilClass。因此,循环遍历每个事件并将该事件显式传递给partial应该可以解决您的错误。

+0

事件在我的电脑本地渲染。是否有一个原因,他们为什么他们在本地渲染,但没有渲染时通过Heroku推送?此外,这部分速记工作之前,我提交我的用户数据库的更改。我对用户数据库的更新是否导致此应用仅在Heroku上打破? – cpflores

+0

本地机器上保存了多少个事件?如果只有一个,那么它会工作。 – zeantsoi

+1

你有没有得到任何解决方案? – zeantsoi

0

我认为event从块未来通过尽可能多的一个对象(类似于@events.each do |event|...)。在没有数据的情况下生成事件行时,您的种子数据是否有问题?你可以运行heroku run rails c,然后运行events = Event.all,看看有没有奇怪的数据(空值)。编辑: 它也将有助于看到更多的错误在event对象或其他东西上调用name

+0

更新了上面的代码。Ran rails控制台检查用户= User.all,所有用户都有nil字段。我添加到用户数据库的7个字段对我的Heroku用户都是零。我假设用户遇到问题,因为那是我最后一次数据库迁移。这些迁移在本地工作,但打破了我的Heroku应用程序。 – cpflores

+0

与zeantsoi所说的相似,也许你在本地只有一个事件,所以它通过了好,而在生产中你有很多事件? – srt32

相关问题