【问题标题】:Heroku nil class errorHeroku nil 类错误
【发布时间】:2014-08-15 06:58:15
【问题描述】:

我刚刚将本地 Rails 4 应用程序推送到 Heroku,但出现了一个奇怪的错误。通常情况下,它在本地运行良好,没有任何问题。我认为 Heroku DB / 环境与本地基本相同(据我所知!)

Heroku 日志中的错误是:ActionView::Template::Error (undefined method 'empty?' for nil:NilClass)

它试图判断关联是否为empty——如果是empty,则显示无结果部分——如果不是empty,则循环遍历结果并为每个结果显示部分结果。

控制器:

@polls     = Poll.where('team_id = ? AND expires_at >= ?', params['id'], DateTime.now())

查看:

<% if @polls.empty? %>
    <%= render partial: "noresults" %>
<% else %>
    <% @polls.each do |p| %>
        <%= render partial: "poll", locals: {poll: p} %>
    <% end %>
<% end %>

我打开了一个 Heroku 控制台并运行了 @polls 查询,它返回了正确的关联,我可以使用 empty? 对其进行测试,并且它按预期工作。

有没有想过是什么原因造成的?

编辑:

数据库.yml

production:
  adapter: postgresql
  encoding: unicode
  pool: 5

【问题讨论】:

  • 您的应用程序是否使用了 DATABASE_URL 的 heroku 配置?
  • @DavidS——“生产”配置非常简单。我会在上面发帖。
  • 你可以使用.blank?...
  • @Niall——这似乎奏效了——但我很想知道为什么?这似乎是核心 rails 的东西,而不是奇怪的 gem 依赖或其他东西。
  • 只是在这里勾选复选框,但你确定@polls.empty 吗?错误指的是什么?

标签: ruby-on-rails postgresql heroku ruby-on-rails-4


【解决方案1】:

数据

您遇到的问题是您在尚未设置的变量/数据对象上调用 .empty?

当您部署到另一个环境时,这是一个标准问题,因为它没有您在开发中拥有的填充数据。这可能是由于您的 production 数据库没有被填充(没有记录),或者您实际上没有连接生产数据库(不太可能)

要解决此问题,您需要确保设置了polls,或者在if 语句中添加另一个条件:

 <% if !@polls.present? || @polls.empty? %>
     <%= render partial: "noresults" %>
 <% else %>
     ...
 <% end %>

原因

最根本的原因是您的变量不会被填充,导致您的应用程序无法调用您需要的方法。这是 Rails 应用程序(不仅仅是在 Heroku 上运行的应用程序)的标准问题

要解决它,您基本上需要验证对象是否存在。一种方法是使用我上面概述的条件方法,或者您可以按照Niall 的建议使用.blank?

【讨论】:

  • @Rich--像往常一样感谢您的出色回答--但正如我在问题中提到的,数据在数据库中,我能够从 heroku 上的 rails 控制台执行查询,它按预期成功返回了关联。
  • 嗯 - 所以它仍然给你带来问题?
猜你喜欢
  • 2013-06-25
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多