rails multi locales language i18n ruby-on-rails rake

ruby on rails - multi - ¿Cuál es la forma estándar de volcar dispositivos de db a yml en los rieles?



rails translation interpolation (6)

Creo que si es la información de administrador estándar, es mejor que pongas eso en las migraciones. Lo ideal es que los accesorios se usen solo para pruebas.

He visto algunos complementos y tareas de rake personalizadas para volcar la base de datos activa en los dispositivos, pero no estoy seguro de cuál es la técnica predominante.

Básicamente, quiero lo contrario de rake: db: fixtures: load para que pueda poner información básica de db (la cuenta de usuario administrador, por ejemplo) en svn para cuando lo implementemos. No quiero tener que crear accesorios manualmente para cosas como datos de muestra que llevarán mucho tiempo.

Cuando implementamos quiero poder simplemente ejecutar

rake db:migrate rake db:fixtures:load

Y estar fuera de las carreras.

¿Cuál es el método mejor / preferido para hacer esto en los rieles?

EDITAR:

Así que parece que no hay una manera estándar de hacer una tarea de rake opuesto de db: fixtures: load.

No quiero usar las migraciones, porque quiero una forma estándar de hacer esto para todos mis proyectos, y no me gusta la idea de poner más de lo que quizás la cuenta de administrador en una migración. En segundo lugar, he estado reconsiderando la idea de usar los accesorios. Decidí usar yaml_db porque usa tareas de rake:

rake db:data:dump rake db:data:load

Los datos terminarán en un archivo YAML sin dañar los dispositivos de prueba (lo que podría ser diferente, ahora que lo pienso con más cuidado). Además, si una herramienta de distribución importante como Heroku lo está utilizando, no tengo que preocuparme por los problemas de soporte / longevidad.

Supongo que esto es lo más cercano al "estándar" que encontraré.

Gracias por todas las buenas respuestas.


Esto suena como que deberías usar db / seeds.rb, y la tarea de rastrillo relacionada db: seed. Estos están diseñados específicamente para cargar datos de semilla. Luego puede hacer llamadas a YamlDB para cargar los datos y rastrillar db: data: dump_dir para volcar todos los dispositivos a un directorio temporal y copiarlos en su directorio de datos de inicio según sea necesario.

Tenga en cuenta que esto NO funciona con los dispositivos de volcado, ya que el formato YAML es diferente. Las ar_fixtures mencionadas anteriormente no funcionan con Rails 3 y parece que ya no tienen soporte. Para los dispositivos de volcado, es posible que desee probar algo como esto en lib / tasks / dump_fixtures.rake:

namespace :db do namespace :fixtures do desc ''Create YAML test fixtures from data in an existing database. Defaults to development database. Specify RAILS_ENV=production on command line to override.'' task :dump => :environment do sql = "SELECT * FROM %s" skip_tables = ["schema_migrations"] ActiveRecord::Base.establish_connection(Rails.env) (ActiveRecord::Base.connection.tables - skip_tables).each do |table_name| i = "000" File.open("#{Rails.root}/test/fixtures/#{table_name}.yml.new", ''w'') do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| hash["#{table_name}_#{i.succ!}"] = record hash }.to_yaml end end end end end

Encontré esto here y lo modifiqué ligeramente para Rails3.




No usa exactamente el mismo formato que db: fixtures: load esperaría, pero ar_fixtures hace que descargar y cargar datos como archivos YAML sea bastante fácil.


Para cualquier otra persona que haya encontrado esto ahora, he modificado ligeramente la respuesta de @jpgeek. Incluya la tabla schema_migration en la lista de ignorados y ordene por ID para que la salida que obtenga sea table_name_001 para ID=1

namespace :db do namespace :fixtures do desc ''Create YAML test fixtures from data in an existing database. Defaults to development database. Specify RAILS_ENV=production on command line to override.'' task :dump => :environment do sql = "SELECT * FROM %s ORDER BY ID" skip_tables = ["schema_info", "schema_migrations"] ActiveRecord::Base.establish_connection(Rails.env) (ActiveRecord::Base.connection.tables - skip_tables).each do |table_name| i = "000" File.open("#{Rails.root}/test/fixtures/#{table_name}.yml.new", ''w'') do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| hash["#{table_name}_#{i.succ!}"] = record hash }.to_yaml end end end end end