rails multi locales language i18n ruby-on-rails yaml

ruby on rails - multi - ¿La mejor manera de exportar una tabla de base de datos a un archivo YAML?



rails translation interpolation (10)

Tengo algunos datos en mi base de datos de desarrollo que me gustaría utilizar como accesorios en mi entorno de prueba. ¿Cuál es la mejor manera en Rails 2.x de exportar una tabla de base de datos a un dispositivo YAML?


He estado usando YamlDb para guardar el estado de mi base de datos.

Instálelo con el siguiente comando:

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

Utilice la tarea de rake para volcar el contenido de la base de datos Rails a db / data.yml

rake db:data:dump

Utilice la tarea de rake para cargar los contenidos de db / data.yml en la base de datos

rake db:data:load

Esta es la página de inicio de los creadores:

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


Hay una tarea de rake para esto. Puede especificar RAILS_ENV si es necesario; el valor predeterminado es el entorno de desarrollo:

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


rake db:fixtures:dump

ha sido cambiado a

rake db:extract_fixtures


Este complemento agregará la funcionalidad que desee. Fue extraído de ActiveRecord por lo que ya no viene por defecto.

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

Entonces corre:

rake db:fixtures:dump MODEL=ModelName


Para Rails 3, si desea volcar yaml desde el DB y usarlo como accesorio, utilizo este código:

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

Simplemente lo ejecuto desde la consola con

require ''./lib/db_to_fixture'' include DbToFixture fixturize ModelName

No he podido obtener ar_fixtures para que funcione con Rails 3 (sin embargo, no lo he intentado mucho). Yaml db es ideal para descargar y guardar el archivo db, pero su formato no es compatible con accesorios.


Aquí hay una tarea de rake que hará exactamente eso (probado en 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

Fuente: http://sachachua.com/blog/2011/05/rails-exporting-data-specific-tables-fixtures/

Nota: tuve que hacer algunos cambios en el código del blog para que sea más compatible con las bases de datos cruzadas y funcione en Rails 3.2


Iron Fixture Extractor fue construido para este propósito. Es particularmente bueno para situaciones en las que desea utilizar conjuntos de dispositivos diferentes para diferentes escenarios de prueba (en lugar de tener todos los accesorios para todas las pruebas). Proporciona funcionalidad para extraer, cargar, reconstruir accesorios, truncar tablas o enganchar hashes concretos de los archivos yaml de su dispositivo.


> rails c irb> puts Modelname.all.to_yaml

luego copie y pegue en el archivo y edítelo para que coincida con lo que esperan los accesorios.

Es trabajo manual, pero si lo necesitas solo una vez, probablemente sea la manera más rápida.