أفضل طريقة لتصدير جدول قاعدة البيانات إلى ملف YAML؟

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

  •  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 من قاعدة البيانات الموجودة ...

github.com/vanboom/yaml_dump

ويعمل مع القضبان (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 التجهيزات في القضبان؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top