Melhor maneira de exportar uma tabela de banco de dados para um arquivo YAML?
-
20-08-2019 - |
Pergunta
Eu tenho alguns dados no meu banco de dados de desenvolvimento que eu gostaria de utilizar como luminárias em meu ambiente de teste. Qual é a melhor maneira de Rails 2.x para exportar uma tabela de banco de dados para um dispositivo elétrico YAML?
Solução
Não é uma tarefa rake para isso. Você pode especificar RAILS_ENV se necessário; o padrão é o ambiente de desenvolvimento:
rake db:fixtures:dump
# Create YAML test fixtures from data in an existing database.
Outras dicas
Eu estive usando YamlDb para salvar o estado do meu banco de dados.
Instale-o com o seguinte comando:
script/plugin install git://github.com/adamwiggins/yaml_db.git
Use a tarefa rake para despejar o conteúdo do banco de dados Rails para db / data.yml
rake db:data:dump
Use a tarefa rake para carregar o conteúdo de db / data.yml no banco de dados
rake db:data:load
Esta é a página inicial criadores:
http://blog.heroku.com/archives/2007/11 / 23 / yamldb_for_databaseindependent_data_dumps /
Este plugin irá adicionar a funcionalidade desejada. É extraído foi de ActiveRecord assim já não vem por padrão.
script/plugin install http://github.com/topfunky/ar_fixtures
Em seguida, execute:
rake db:fixtures:dump MODEL=ModelName
Para Rails 3, se você quiser despejar yaml do DB e usá-lo como um dispositivo elétrico, eu uso este código:
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
Eu só executá-lo a partir do console com
require './lib/db_to_fixture'
include DbToFixture
fixturize ModelName
Eu não tenho sido capaz de obter ar_fixtures a trabalhar com Rails 3 (não tentei embora muito difícil). Yaml db é ótimo para dumping e salvar a db, mas o seu formato não é compatível com acessórios.
Ferro Fixação Extractor foi construído exatamente para este fim. É particularmente bom para situações onde você deseja usar diferentes conjuntos de fixação para diferentes cenários de teste (em vez de ter todos os equipamentos para todos os testes). Ele fornece funcionalidade para extrair, carregamento, a reconstrução de luminárias, truncando tabelas, ou snagging hashes particulares de seus arquivos yaml fixação.
rake db:fixtures:dump
foi alterado para
rake db:extract_fixtures
Muito simples gem irá criar yaml luminárias de banco de dados existente ...
Funciona com Rails 4.
Aqui está uma tarefa rake que irá fazer exatamente isso (testado no 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
Fonte: http://sachachua.com / blog / 2011/05 /-específicas dados trilhos exportadores de-mesas-luminárias /
Nota: Eu tive que fazer algumas alterações no código blog para torná-lo mais entre bancos de dados compatíveis e trabalhar em Rails 3.2
> rails c
irb> puts Modelname.all.to_yaml
, em seguida, copiar e colá-lo no arquivo e editá-lo para corresponder ao que equipamentos esperar.
É o trabalho manual, mas se você precisar desta vez provavelmente a maneira apenas mais rápido.
Para dumping para dispositivos de teste / pepino rspec no Rails 3 esta é a melhor resposta que eu encontrei: Qual é a maneira padrão de despejar db para luminárias yml em trilhos?