ActiveRecords неправильно сериализован в yaml - PullRequest
3 голосов
/ 20 марта 2011

Когда я сериализую активные записи, я обнаруживаю, что формат yaml отличается в зависимости от того, на каком ящике я работаю. На одной коробке я получаю:

object: !ruby/object:User 

вместо

object: !ruby/ActiveRecord:User 

Первая версия - это проблема, потому что активная поддержка должна сделать что-то волшебное, чтобы правильно заполнить активную запись, когда десмеризация yaml. В чем причина этой разницы и как я могу убедиться, что используется второй формат?


Я использую ruby ​​1.9.2 и заставил движок yaml использовать syck, используя

require "yaml"
YAML::ENGINE.yamler = "syck"

в boot.rb (приложение rails).

Обновление

Покопавшись немного дальше, я обнаружил, что тип ActiveRecord не регистрируется в yaml. На сервере, где работает следующий вызов:

YAML.resolver.tags.keys

включает в себя:

"tag:ruby.yaml.org,2002:ActiveRecord"

Этот тип отсутствует на сервере, который ведет себя некорректно. Проблема в том, что я понятия не имею, почему тип не зарегистрирован.

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

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

Таким образом, проблема оказалась проблемой конфигурации с пассажиром.Если у вас есть файл в вашем проекте в config / setup_load_paths.rb, тогда ваш Gemfile не загружается.Я добавил

require "yaml"
YAML::ENGINE.yamler = "syck"

в верхней части моего Gemfile, чтобы убедиться, что двигатель был выбран до загрузки рельсов и регистрации его активного конвертера записей в yaml.Пассажир не запускал Gemfile, поэтому двигатель никогда не заводился, а ruby ​​по умолчанию использовал pysch вместо syck.Текущая версия delayed_job заставляет использовать syck, но, поскольку psy загружается, ядро ​​syck никогда не регистрировало активный конвертер записей.

0 голосов
/ 21 марта 2011

Этот тип проблемы обычно вызывается перезагрузкой класса Rails. Вы пробовали установить:

 config.cache_classes = true

в config / средах / development.rb?

...