Лучший способ экспортировать таблицу базы данных в файл YAML? - PullRequest
31 голосов
/ 29 января 2009

У меня есть некоторые данные в моей базе данных разработки, которые я хотел бы использовать в качестве фиксаторов в моей тестовой среде. Каков наилучший способ в Rails 2.x экспортировать таблицу базы данных в прибор YAML?

Ответы [ 10 ]

24 голосов
/ 05 февраля 2009

Для этого есть грабли. Вы можете указать RAILS_ENV, если необходимо; по умолчанию используется среда разработки:

rake db:fixtures:dump
    # Create YAML test fixtures from data in an existing database.
21 голосов
/ 29 января 2009

Я использовал YamlDb для сохранения состояния моей базы данных.

Установите его с помощью следующей команды:

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

Используйте задачу rake, чтобы сбросить содержимое базы данных Rails в db / data.yml

rake db:data:dump

Используйте задачу rake для загрузки содержимого db / data.yml в базу данных

rake db:data:load

Это домашняя страница создателей:

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

9 голосов
/ 16 апреля 2010

Этот плагин добавит желаемую функциональность. Он был извлечен из ActiveRecord, поэтому больше не поставляется по умолчанию.

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

Затем запустите:

rake db:fixtures:dump MODEL=ModelName

6 голосов
/ 03 сентября 2012

Для Rails 3, если вы хотите сбросить 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 отлично подходит для выгрузки и сохранения БД, но его формат не совместим с приборами.

4 голосов
/ 02 августа 2013

Устройство для извлечения железа было создано именно для этой цели. Это особенно хорошо для ситуаций, когда вы хотите использовать разные наборы приборов для разных сценариев тестирования (вместо того, чтобы иметь все приборы для всех тестов). Он предоставляет функции для извлечения, загрузки, перестройки приборов, усечения таблиц или получения определенных хешей из файлов yaml устройств.

2 голосов
/ 19 февраля 2014

Очень простой гем создаст фиксации yaml из существующей базы данных ...

github.com / vanboom / yaml_dump

Работает с Rails 4.

2 голосов
/ 07 апреля 2010

rake db:fixtures:dump

было изменено на

rake db:extract_fixtures

1 голос
/ 03 января 2014
 > rails c
 irb> puts Modelname.all.to_yaml

, затем скопируйте и вставьте его в файл и отредактируйте так, чтобы он соответствовал ожиданиям.

Это ручной труд, но если вам это нужно, возможно, самый быстрый способ.

1 голос
/ 11 октября 2012

Вот задача rake, которая будет делать именно это (протестировано в 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

Источник: http://sachachua.com/blog/2011/05/rails-exporting-data-specific-tables-fixtures/

Примечание: мне пришлось внести несколько изменений в код блога, чтобы сделать его более совместимым с базами данных и работать в Rails 3.2

0 голосов
/ 04 апреля 2013

Для дампа тестовых устройств rspec / cucumber в Rails 3 это лучший ответ, который я нашел: Каков стандартный способ выгрузки осветительных приборов db на yml в рельсах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...