ruby on rails - seeds - ¿Cómo se usa seed.rb para completar selectivamente las bases de datos de desarrollo y/o producción?
rake seed rails (3)
Otro enfoque podría estar creando:
db/seeds/development.rb
db/seeds/production.rb
db/seeds/any_other_environment.rb
Luego en db/seeds.rb
:
# Code you want to run in all environments HERE
# ...
load(Rails.root.join( ''db'', ''seeds'', "#{Rails.env.downcase}.rb"))
Luego, escriba el código que desea ejecutar para cada entorno en el archivo respectivo.
Estoy usando seed.rb para poblar mi base de datos de desarrollo y producción. Normalmente llené el primero con datos ficticios y el último con los datos reales mínimos que mi aplicación necesita para ejecutarse (por ejemplo, el primer usuario, etc.).
¿Cómo puedo especificar en seed.rb para qué entorno es cada información?
Dado que sé que "grupo" es un método de Gemfile, me gustaría lograr el mismo comportamiento para seed.rb.
Por ejemplo, me gustaría escribir algo como esto en mi seed.rb:
group :development do
# development specific seeding code
end
group :production do
# production specific seeding code
end
# non-specific seeding code (it always runs)
Esto para poder llamar tanto el código específico del desarrollo como el no específico con
$ rake db:seed
Y para llamar tanto al código específico de producción como al no específico con:
$ rake db:seed RAILS_ENV=production
Gracias
otro enfoque, bastante similar a la respuesta de @fabro: agregue una carpeta semillas a db/
con los nombres de entorno y otra llamada common.rb, por lo que obtendrá algo como:
db/seeds/common.rb
db/seeds/development.rb
db/seeds/staging.rb
db/seeds/production.rb
que, en tu seed.rb
:
ActiveRecord::Base.transaction do
[''common'', Rails.env].each do |seedfile|
seed_file = "#{Rails.root}/db/seeds/#{seedfile}.rb"
if File.exists?(seed_file)
puts "- - Seeding data from file: #{seedfile}"
require seed_file
end
end
end
Permítan correr la semilla en una transacción
seeds.rb
es solo un archivo simple de ruby, por lo que hay varias formas de acercarte a esto. ¿Qué tal una declaración de caso?
# do common stuff here
case Rails.env
when "development"
...
when "production"
...
end