أفضل طريقة لتصدير جدول قاعدة البيانات إلى ملف YAML؟
-
20-08-2019 - |
سؤال
ولدي بعض البيانات في قاعدة بيانات تطوري التي أود أن تستخدم كما التجهيزات في بيئة اختبار بلدي. ما هو أفضل وسيلة في القضبان الإصدار 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
استخدم مهمة أشعل النار لتفريغ محتويات قاعدة البيانات القضبان إلى ديسيبل / data.yml
rake db:data:dump
استخدم مهمة أشعل النار لتحميل محتويات ديسيبل / data.yml في قاعدة البيانات
rake db:data:load
وهذا هو موقع المبدعين:
http://blog.heroku.com/archives/2007/11 / 23 / yamldb_for_databaseindependent_data_dumps /
وهذا البرنامج المساعد سيضيف وظيفة تريد. تم استخراجه من أكتيفيريكورد ذلك لم يعد يأتي بشكل افتراضي.
وscript/plugin install http://github.com/topfunky/ar_fixtures
ثم تشغيل:
وrake db:fixtures:dump MODEL=ModelName
لالقضبان 3، إذا كنت تريد تفريغ YAML من DB واستخدامه بمثابة لاعبا اساسيا، وأنا استخدم هذا الرمز:
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 للعمل مع القضبان 3 (لم يحاكم من الصعب جدا على الرغم من). YAML ديسيبل تعتبر كبيرة بالنسبة لالإغراق وتوفير ديسيبل، ولكن شكله غير متوافق مع التركيبات.
بنيت الحديد تركيبات النازع للحصول على بالضبط هذا الغرض. انها جيدة لا سيما في الحالات التي ترغب في استخدام مجموعات اعبا اساسيا مختلفة لسيناريوهات الاختبار المختلفة (بدلا من وجود جميع التجهيزات لجميع الاختبارات). ويوفر وظائف لاستخراج والتحميل وإعادة بناء المواعيد والجداول اقتطاع، أو التمزق التجزئة معينة من ملفات YAML اعبا اساسيا لديك.
وrake db:fixtures:dump
تم تغيير ل
وrake db:extract_fixtures
والأحجار الكريمة بسيط جدا سيخلق ومواعيد المباريات YAML من قاعدة البيانات الموجودة ...
ويعمل مع القضبان (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 / بلوق / 2011/05 / محددة القضبان المصدرة للبيانات الجداول-تركيبات /
ملحوظة: كان لي أن أدلي ببعض التغييرات على قانون بلوق لجعله أكثر عبر قاعدة بيانات متوافقة والعمل في القضبان 3.2
> rails c
irb> puts Modelname.all.to_yaml
ثم قم بنسخها ولصقها في ملف وتحريره لتطابق ما تتوقع التركيبات.
وانها العمل اليدوي ولكن إذا كنت بحاجة إلى هذا مرة واحدة فقط على الأرجح أسرع وسيلة.
لإغراق لrspec / التركيبات اختبار الخيار في القضبان 3 هذا هو أفضل إجابة لقد وجدت: ما هي الطريقة القياسية ل تفريغ ديسيبل لyml التجهيزات في القضبان؟