2014-04-20 3 views
1

Rails 4.0.3. У меня есть форма с полем даты. Другими словами, он работает только тогда, когда я просто использую date_select. который отлично работает на моей машине dev. Когда я развертываю его на производство, форма отказывается подавать и бросает NoMethodError после достижения даты, жалуясь на отсутствие метода utc. Я не могу отследить его, потому что журнал производственного сервера никогда не говорит мне больше, чем строка, в которой он терпит неудачу, но эта строка - это строка Model.new (params [: form]), и сбой происходит во время магии преобразования типов.Rails NoMethodError при преобразовании строк на дату из отправленной формы

Поле в настоящее время является текстовым полем со значением, предоставленным jQuery UI datepicker, но эта проблема существует и в том случае, когда она является равным Rails formhelper date_field. Как только он добирается до даты, он терпит неудачу ... но он отлично работает в dev, и я развертываю его на производстве с помощью Git, поэтому я знаю, что мы на одной странице.

Локально, я работаю в jRuby и использую Neo4j.rb 2.3 в качестве моей БД. Я подражал среде разработчиков, запустив сервер приложений производства Torquebox, и он по-прежнему локальный, и не удался. Я запускаю ту же самую версию jRuby в обоих местах, и у меня есть все мои драгоценные камни, привязанные к определенным версиям, чтобы исключить некоторые странные ошибки, связанные с версией. Любые мысли очень ценятся!

ответ

1

я понял, решение, как только я щелкал кнопку отправки, но хотел документировать это в случае, если кто-либо когда-либо имеет этот вопрос. Это на самом деле ошибка в драгоценности gem neo4j ..., у которой был запрошен запрос на растяжение два месяца назад ... что я написал. И я забыл об этом. Мой локальный гемсет по-прежнему имел модифицированную версию кеша, я думаю, но сервер использовал только последнюю версию, которая была сделана до моего изменения.

Эта ошибка находится в type_converters.rb. Neo4j сохраняет все времена и даты в DB как целые числа, поэтому ему нужно преобразовать все, что подано. Исходный код проверял тип подлежащего преобразованию объекта. Если это была дата, она преобразует ее в определенное время и затем запускает utc; иначе он просто запускал utc. Это, очевидно, не подходит для строк, поэтому мое исправление сначала запустило Time.parse (s).

Так что, если кто-то еще с этим вопросом и использует Neo4j.rb 2.3, добавьте следующую строку в ваш Gemfile

gem 'neo4j-wrapper', git: 'https://github.com/andreasronge/neo4j-wrapper', ref: '00e5665ead' 
1

Попробуйте этот код и посмотреть, если он работает: -

date_string = "#{review_params['date(1i)']}-#{review_params['date(2i)']}-#{review_params['date(3i)']}" 
@concert = Concert.find_or_create_by!(artist: review_params[:artist], venue: review_params[:venue], date: date_string)