Yaml :: load_file действует по-разному между разработкой и производством (Rails) - PullRequest
1 голос
/ 22 марта 2010

Я полностью озадачен природой этой проблемы.

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

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

[#<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]

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

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

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

Теперь это было бы просто недоумением, если бы оно включало в него и связанное с ним исключение модели - однако это не так.понять, почему анализатор Yaml будет вести себя так по-разному между производством и разработкой?

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

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

1 Ответ

1 голос
/ 22 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...