데이터베이스 테이블을 YAML 파일로 내보내는 가장 좋은 방법?

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

  •  20-08-2019
  •  | 
  •  

문제

개발 데이터베이스에 테스트 환경에서 고정 장치로 활용하고 싶은 데이터가 있습니다. Rails 2.X에서 데이터베이스 테이블을 YAML 비품으로 내보내는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

이것에 대한 갈퀴 작업이 있습니다. 필요한 경우 RAILS_ENV를 지정할 수 있습니다. 기본값은 개발 환경입니다.

rake db:fixtures:dump
    # Create YAML test fixtures from data in an existing database.

다른 팁

데이터베이스 상태를 저장하기 위해 Yamldb를 사용했습니다.

다음 명령으로 설치하십시오.

script/plugin install git://github.com/adamwiggins/yaml_db.git 

레이크 작업을 사용하여 Rails 데이터베이스의 내용을 DB/DATA.YML에 덤프하십시오.

rake db:data:dump

레이크 작업을 사용하여 DB/DATA.YML의 내용을 데이터베이스에로드하십시오.

rake db:data:load

이것은 제작자 홈페이지입니다.

http://blog.heroku.com/archives/2007/11/23/yamldb_for_databaseindependent_data_dumps/

이 플러그인은 원하는 기능을 추가합니다. ActiveRecord에서 추출되었으므로 더 이상 기본적으로 오지 않습니다.

script/plugin install http://github.com/topfunky/ar_fixtures

그런 다음 실행 :

rake db:fixtures:dump MODEL=ModelName

Rails 3의 경우 DB에서 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를 덤프하고 저장하는 데 적합하지만 형식은 비품과 호환되지 않습니다.

철 고정물 추출기 이 목적을 위해 만들어졌습니다. 특히 모든 테스트에 대한 모든 비품이 아닌 다른 테스트 시나리오에 다른 고정물 세트를 사용하려는 상황에 특히 좋습니다. 비품 YAML 파일에서 추출, 로딩, 재건축, 테이블을 잘라내거나 특정 해시를 잡아 당기는 기능을 제공합니다.

rake db:fixtures:dump

변경되었습니다

rake db:extract_fixtures

매우 간단한 보석은 기존 데이터베이스에서 Yaml 비품을 만듭니다 ...

github.com/vanboom/yaml_dump

Rails 4에서 작동합니다.

다음은 정확히 그 일을하는 갈퀴 작업입니다 (레일 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-fixtures/

참고 : 블로그 코드를 몇 가지 변경하여보다 교차-다수 호환 가능하고 Rails 3.2에서 작업해야했습니다.

 > rails c
 irb> puts Modelname.all.to_yaml

그런 다음 파일에 복사하여 붙여 넣고 편집하여 고정구가 기대하는 것과 일치하도록 편집하십시오.

그것은 매뉴얼 노동이지만, 당신이 이것을 필요로한다면 아마도 가장 빠른 방법 일 것입니다.

Rails 3의 RSPEC/Cucumber Test 비품 덤프를 위해 이것은 내가 찾은 가장 좋은 답입니다.레일에 DB를 YML 고정구로 덤프하는 표준 방법은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top