데이터베이스 테이블을 YAML 파일로 내보내는 가장 좋은 방법?
-
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
다음은 정확히 그 일을하는 갈퀴 작업입니다 (레일 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 고정구로 덤프하는 표준 방법은 무엇입니까?