0

在我的本地环境中使用逗号 gem并导出 CSV 文件非常好。还在我们在 AWS 实例上运行的暂存环境中工作。

只有在 Heroku 上失败了。

Heroku 说:

2013-08-21T21:55:34.875724+00:00 app[web.1]: NoMethodError (undefined method `klass' for nil:NilClass):
2013-08-21T21:55:34.875724+00:00 app[web.1]:   app/models/job.rb:220:in `block in <class:Job>'
2013-08-21T21:55:34.875724+00:00 app[web.1]:   app/controllers/jobs_controller.rb:25:in `block (2 levels) in index'
2013-08-21T21:55:34.875724+00:00 app[web.1]:   app/controllers/jobs_controller.rb:18:in `index'

我的 Job 模型中的第 220 行是:

Comma do
...
    customer :first_name
...
end

job.rb 包括以下行:

  belongs_to :customer

customer.rb 有:

  has_many :jobs

正如我所提到的,这整件事在我的本地盒子上运行良好 - 我单击导出按钮并弹出所有工作,每个客户都在相应的列中。

无论出于何种原因,它只会在 Heroku 上失败。

我在 Heroku 上使用 Ruby 2.0.0-p0,根据文档,逗号 gem 仅验证到 1.9.2 - 但是 - 我在登台服务器和本地环境中使用 Ruby 2.0.0-p0,并且,再次,它正在工作

真正让我失望的是'klass',因为我的代码中没有任何地方。我已经阅读了有关相同错误及其解决方案的其他线程,但我没有嵌套模型表单和喜欢。

Heroku & Ruby 2.0 和关联有问题吗?我两边都有has_many和belongs_to,但似乎仍然误解了关联......

更新

从框架跟踪:

comma (3.1.0) lib/comma/extractors.rb:72:in `get_association_class'  <====
comma (3.1.0) lib/comma/extractors.rb:55:in `block in method_missing'
comma (3.1.0) lib/comma/extractors.rb:48:in `each'
comma (3.1.0) lib/comma/extractors.rb:48:in `method_missing'
comma (3.1.0) lib/comma/extractors.rb:15:in `instance_eval'
comma (3.1.0) lib/comma/extractors.rb:15:in `results'
4

2 回答 2

0

您的代码在本地和 prod 上可能相同,并且看起来您在本地和生产上使用相同的 Rails/Ruby 版本(好东西!),但也许您的数据不是。也许问题是在生产中你正在检索一个 Job 并导航到某个关联,但是那个关联不存在,你得到一个 nil 和 kaboom?

于 2013-08-22T15:37:29.253 回答
0

事实证明,这是 Comma gem 中的一个合法错误 - https://github.com/comma-csv/comma/releases

我报告了,他们接受、修复并发布了 v 3.1.1

于 2013-09-04T22:12:37.260 回答