Есть ли какой-нибудь драгоценный камень, который может сбрасывать данные из файлов yml и в них?

Я целый день ищу такую ​​жемчужину, но не нахожу хорошую. Я хочу написать один, но я не в состоянии это сделать.

Данные в моей базе данных могут быть текстом на английском языке, который будет выгружен в файл yml с простым текстом. И некоторые неанглийский текст, который будет бинарным типом.

И у обоих может быть такой код:

<% xxx %>

Когда я использую rake db:fixtures:load для загрузки их в базу данных, может возникнуть ошибка: method xxx not found.

Я wan't найти хороший драгоценный камень может справиться с этой проблемой. Спасибо за любую помощь


ОБНОВЛЕНИЕ

Я отказался от поиска такой жемчужины. Сначала я думал, что это простая задача, но теперь, после некоторых исследований, я должен сказать, что это намного сложнее, чем я ожидал.


person Freewind    schedule 21.06.2010    source источник


Ответы (2)


Причина, по которой у вас возникли проблемы, заключается в том, что загрузчик Fixture перед загрузкой данных пропустит ваш прибор через erb. Это означает, что если в вашем файле yaml есть ‹% xxx %>, то Rails увидит это как erb и попытается запустить метод с именем xxx.

Кажется, не существует простого способа отключить обработку erb для приборов. Я попытался заменить фикстуры на CSV-фикстуры, и это по-прежнему выполняет предварительную обработку ERB.

Без простого ответа я должен задать вопрос Почему у вас есть эти строки в вашем файле?

Вы хотите, чтобы они были расширены erb?

person Steve Weet    schedule 25.06.2010
comment
Я согласен с вами, я много перепробовал и обнаружил, что решить эту проблему невозможно (если контент английский и короткий, to_yaml() будет использовать обычный текст. Если контент не на английском языке, to_yaml будет использовать двоичный код. Простая замена не будет работать). - person Freewind; 27.06.2010
comment
Мои файлы содержат такие строки, потому что содержимое в базе данных представляет собой некоторый код, который содержит такой код erb. Я хочу, чтобы rake db:dump:fixtrues не обращался с ними как с эрбами. - person Freewind; 27.06.2010
comment
Я надеялся сбросить все данные базы данных в файлы yml и загрузить их обратно. Но теперь, я должен сказать, это очень сложная задача (например, последовательности не будут сбрасываться в файлы, когда вы загрузитесь обратно, последовательности вашей базы данных будут иметь недопустимые текущие значения). Поэтому я сдаюсь, перехожу к использованию инструментов резервного копирования/восстановления базы данных. - person Freewind; 27.06.2010

Эээ... Я не уверен, что вам действительно нужен драгоценный камень для этого? Rails изначально может превратить любую модель в YAML.

Допустим, у вас есть модель под названием «Объекты». Вы можете выбрать маршрут, который выглядит так:

/objects.yaml

и вы получите гигантский текстовый файл всех ваших объектов в форме YAML.

Конечно, вы хотели бы иметь что-то вроде:

respond_to do |format|
  format.yaml {render  :yaml => @objects}
end

в вашем спокойном контроллере.

Если вы не хотите идти по пути, чтобы сделать это, вы всегда можете сделать

@yaml = []
@objects.each do |object|
@yaml.push object.to_yaml
end

где угодно в ruby, что даст вам массив объектов yaml, которые вы затем можете записать в файл на досуге.

Я предполагаю, что если сами рельсы генерируют yaml, то он сможет позже загрузить его как фикстуру?

person J.R.    schedule 25.06.2010
comment
когда я выгружаю базу данных в файлы yaml, я использую object.to_yaml в среде rails. Но, к сожалению, при обратной загрузке рельсы будут рассматривать его как код erb, а не как обычный текст. Я отказался от поиска такого драгоценного камня, может быть, это невыполнимая миссия. Спасибо за ответ. - person Freewind; 27.06.2010