Melhor maneira de exportar uma tabela de banco de dados para um arquivo YAML?

StackOverflow https://stackoverflow.com/questions/490507

  •  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?

Foi útil?

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 ...

github.com/vanboom/yaml_dump

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top