У меня есть некоторые данные в моей базе данных разработки, которые я хотел бы использовать в качестве инструментов в своей тестовой среде. Как лучше всего в Rails 2.x экспортировать таблицу базы данных в устройство YAML?
Лучший способ экспортировать таблицу базы данных в файл YAML?
Ответ 1
Для этого есть задача rake. При необходимости вы можете указать RAILS_ENV; по умолчанию используется среда разработки:
rake db:fixtures:dump
# Create YAML test fixtures from data in an existing database.
Ответ 2
Я использовал YamlDb для сохранения состояния моей базы данных.
Установите его с помощью следующей команды:
script/plugin install git://github.com/adamwiggins/yaml_db.git
Используйте задачу rake для сброса содержимого базы данных Rails в db/data.yml
rake db:data:dump
Используйте команду rake для загрузки содержимого db/data.yml в базу данных
rake db:data:load
Это страница создателей:
http://blog.heroku.com/archives/2007/11/23/yamldb_for_databaseindependent_data_dumps/
Ответ 3
Этот плагин добавит нужные функции. Он был извлечен из ActiveRecord, поэтому по умолчанию не поступает.
script/plugin install http://github.com/topfunky/ar_fixtures
Затем запустите:
rake db:fixtures:dump MODEL=ModelName
Ответ 4
Для Rails 3, если вы хотите сбросить yaml из БД и использовать его как инструмент, я использую этот код:
module DbToFixture
TEMP_FIXTURE_PATH = Rails.root.join("test", "new_fixtures")
def fixturize(model)
Dir.mkdir(TEMP_FIXTURE_PATH) unless File.exists?(TEMP_FIXTURE_PATH)
fname = model.table_name
file_path = TEMP_FIXTURE_PATH.join(fname)
File.open(file_path, 'w') do |f|
model.all.each do |m|
f.write(m.to_yaml)
end
end
end
end
Я просто запускаю его с консоли с помощью
require './lib/db_to_fixture'
include DbToFixture
fixturize ModelName
Мне не удалось заставить ar_fixtures работать с Rails 3 (хотя и не очень старался). Yaml db отлично подходит для демпинга и сохранения db, но его формат не совместим с приборами.
Ответ 5
Iron Extractor был построен именно для этой цели. Это особенно полезно для ситуаций, когда вы хотите использовать разные наборы приборов для разных сценариев тестирования (вместо того, чтобы иметь все приспособления для всех тестов). Он предоставляет функциональные возможности для извлечения, загрузки, перестройки светильников, усечения таблиц или захвата определенных хэшей из ваших файлов yaml вашего прибора.
Ответ 6
rake db:fixtures:dump
был изменен на
rake db:extract_fixtures
Ответ 7
Очень простой камень создаст ярлыки из существующей базы данных...
Работает с Rails 4.
Ответ 8
Здесь задание грабли, которое будет делать именно это (проверено в Rails 3.2.8):
namespace :db do
task :extract_fixtures => :environment do
sql = 'SELECT * FROM "%s"'
skip_tables = ["schema_migrations"]
ActiveRecord::Base.establish_connection
if (not ENV['TABLES'])
tables = ActiveRecord::Base.connection.tables - skip_tables
else
tables = ENV['TABLES'].split(/, */)
end
if (not ENV['OUTPUT_DIR'])
output_dir="#{Rails.root}/test/fixtures"
else
output_dir = ENV['OUTPUT_DIR'].sub(/\/$/, '')
end
(tables).each do |table_name|
i = "000"
File.open("#{output_dir}/#{table_name}.yml", 'w') do |file|
data = ActiveRecord::Base.connection.select_all(sql % table_name.upcase)
file.write data.inject({}) { |hash, record|
hash["#{table_name}_#{i.succ!}"] = record
hash
}.to_yaml
puts "wrote #{table_name} to #{output_dir}/"
end
end
end
end
Источник: http://sachachua.com/blog/2011/05/rails-exporting-data-specific-tables-fixtures/
Примечание. Мне пришлось внести несколько изменений в код блога, чтобы сделать его более совместимым с кросс-базами и работать в Rails 3.2
Ответ 9
Для демпинга для тестов rspec/cucumber в Rails 3 это лучший ответ, который я нашел: Каков стандартный способ сброса db в yml-светильники в рельсах?
Ответ 10
> rails c
irb> puts Modelname.all.to_yaml
затем скопируйте и вставьте его в файл и отредактируйте его в соответствии с ожидаемыми условиями.
Это ручной труд, но если вам это нужно всего лишь один раз, это самый быстрый способ.