Не удалось экспортировать драгоценный камень запятой на Heroku - работает в локальной среде

Использование запятой и экспорт файлов CSV прекрасно работает в моей локальной среде. Также работаем над нашей промежуточной средой, которая работает на экземпляре AWS.

ТОЛЬКО провал на 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'

И строка 220 в моей модели работы:

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

job.rb включает строку:

  belongs_to :customer

А у customer.rb есть:

  has_many :jobs

И, как я уже упоминал, все это отлично работает на моем локальном ящике — я нажимаю кнопку экспорта, и выводятся все задания с каждым клиентом в соответствующем столбце.

По какой-то причине это не работает только на Heroku.

Я использую Ruby 2.0.0-p0 на Heroku, гем Comma только проверено до 1.9.2 в соответствии с документацией - НО - я использую Ruby 2.0.0-p0 на промежуточном сервере И в моей локальной среде, и, опять же, это работает.

Это «класс», который меня действительно сбивает с толку, потому что в моем коде его нет. Я читал другие потоки о той же ошибке и их решениях, но у меня нет таких вещей, как формы вложенных моделей и подобно.

Это какая-то проблема с Heroku & Ruby 2.0 и ассоциациями? У меня есть has_many и own_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'

person notaceo    schedule 21.08.2013    source источник


Ответы (2)


Ваш код может быть одинаковым как в локальной, так и в рабочей среде, и похоже, что вы используете одни и те же версии Rails/Ruby в локальной и рабочей среде (хороший материал!), но, возможно, ваши данные — нет. Возможно, проблема в том, что в продакшне вы извлекаете задание и переходите к какой-то ассоциации, но этой ассоциации не существует, вы получаете ноль и бабах?

person Jon Mountjoy    schedule 22.08.2013
comment
Очень умное наблюдение, но в данном случае, насколько мне известно, оно не может быть правдой. Я использую Mongo и каждое утро локально выполняю db.dropDatabase(), а затем db.copyDatabase() из моего экземпляра MongoLab, который управляет средой Heroku. Так что я уверен, что это то же самое. Почти уверен, что я предполагаю, что еще одним шагом по устранению неполадок будет экспорт из MongoLab и импорт локального на случай, если команда копирования делает что-то по-другому, и это действительно неточно. - person notaceo; 22.08.2013
comment
Как насчет добавления некоторых операторов отладки? По крайней мере, сбросьте идентификатор задания / job.customer на стандартный вывод и, следовательно, в журналы - я все еще держу пари, что это ноль :-) - person Jon Mountjoy; 22.08.2013

Оказалось, что это была законная ошибка в геме Comma — https://github.com/comma-csv/comma/releases

Я сообщил, и они приняли, исправили и выпустили версию 3.1.1.

person notaceo    schedule 04.09.2013