2010-03-22 2 views
1

Я полностью в тупике от природы этой проблемы.Yaml :: load_file, действующий разным образом между разработкой и производством (Rails)

Мы экспортируем данные из нашего приложения в «очищенный» файл YAML (удаление идентификаторов, created_at и т. Д.). Затем мы (будем) разрешаем пользователям импортировать эти файлы обратно в приложение - это импорт, который полностью отключает меня.

В разработке, YAML::load_file(params[:uploaded_data].local_path) возвращает массив YAML :: Объекты (и это не имеет значения, какой из числа различных способов файл может быть загружен):

[#<YAML::Object:0x3c63984 @class="Event", @ivars={"attributes"=>{"exception_count"=>"0", "title"=>"Start", "amount"=>"70.00", "colour"=>nil, "repeat_type_id"=>"0", "repeat_interval"=>"1"}}>, etc etc] 

что очень приятно, так как атрибуты также включают исключения (связанные модели), для которых вы видите exception_count.

Однако при производстве (рельсы 2.3.2, работающие на REE 1.8.7 и 1.8.6 для тестирования, протестированные на двух разных производственных объектах и ​​работающие на месте локально), он возвращает массив объектов в YAML - в этом случай, событие:

[#<Event title: "Start", amount: #<BigDecimal:3af2640,'0.7E2',4(8)>, repeat_type_id: 0, colour: nil, repeat_interval: 1, exception_count: 0>, etc etc] 

Теперь это будет просто озадачивает, если он также включал соответствующую модель Exception с ней - однако это не так.

Может ли кто-нибудь вообще пролить свет на то, почему парсер Ямл будет вести себя так по-разному между производством и развитием?

Я на рельсах 2.3.2, работающий на REE 1.8.7; однако я также тестировал работу с Ruby 1.8.6 с точно такими же результатами.

Спасибо за помощь!

ответ

1

Я думаю, это может быть вызвано cache_classes, установленным на true в производстве и в разработке false. Метод YAML::load_file попытается найти классы, относящиеся к этим объектам, и поскольку они еще не были загружены, они просто создадут их как объекты YAML.

Попробуйте сначала загрузить «Класс события», просто позвонив Event и посмотрев, исправляет ли он это.

+0

Спасибо, Райан, место на! Вызов 'Event' заставляет разработку вести себя точно так же, как и производство, при возврате объектов Event. Чтобы получить требуемый результат (необработанные объекты Ямла, с которыми я могу манипулировать), я изменил экспортированный тег класса из Event и был хорош. Еще раз спасибо за помощь! – James