specific seeds run remove rails from create ruby-on-rails ruby ruby-on-rails-3.2 rake seed

ruby on rails - seeds - Agregar un archivo de inicialización personalizado



run specific seed rails (3)

Comience por crear un directorio separado para guardar sus semillas personalizadas; este ejemplo usa db/seeds . A continuación, cree una tarea personalizada agregando un rakefile a su directorio lib/tasks :

# lib/tasks/custom_seed.rake namespace :db do namespace :seed do Dir[Rails.root.join(''db'', ''seeds'', ''*.rb'')].each do |filename| task_name = File.basename(filename, ''.rb'') desc "Seed " + task_name + ", based on the file with the same name in `db/seeds/*.rb`" task task_name.to_sym => :environment do load(filename) if File.exist?(filename) end end end end

Este rakefile acepta el nombre de un archivo semilla en el directorio db/seeds (excluyendo la extensión .rb ), luego lo ejecuta como lo haría con seeds.rb . Puede ejecutar la tarea de rake emitiendo lo siguiente desde la línea de comando:

rake db:seed:file_name # Name of the file EXCLUDING the .rb extension

Actualización: ahora también debería enumerar las tareas de rake --tasks al ejecutar rake --tasks o rake -T .

Quiero rellenar una nueva característica con datos ficticios, pero no quiero usar el archivo db / seeds.rb, ya que tiene semillas de otros datos irrelevantes para esta característica.

Para ejecutar el archivo predeterminado seeds.rb , ejecute el comando rake db:seed .

Si creo un archivo en el directorio db llamado seeds_feature_x.rb , ¿cómo se vería el comando rake para ejecutar (solo) ese archivo?


Probé la respuesta de Zeansoi pero no me dio lo que quería, todos los archivos estaban en un directorio. Lo pirateó y obtuve esto.

namespace :db do namespace :seed do task :single => :environment do filename = Dir[File.join(Rails.root, ''db'', ''seeds'', "#{ENV[''SEED'']}.seeds.rb")][0] puts "Seeding #{filename}..." load(filename) if File.exist?(filename) end end end

Y para usar esto haz lo siguiente:

rake db:seed:single SEED=<seed_name_without_.seeds.rb>

Esto buscará en la carpeta Rails.root / db / seeds un nombre de archivo sin .seeds.rb (se los agrega).

Ejemplo de trabajo:

rake db:seed:single SEED=my_custom_seed

Lo anterior Rails.root/db/seeds/my_custom_seed.seeds.rb el Rails.root/db/seeds/my_custom_seed.seeds.rb


¡Demasiado complicado! Solo quería una tarea simple para ejecutar cada archivo en el directorio db / seeds sin pasar ningún nombre de archivo.

# lib/tasks/seed.rake desc "Run all files in db/seeds directory" namespace :db do task seed: :environment do Dir[File.join(Rails.root, ''db'', ''seeds'', ''*.rb'')].each do |filename| puts "seeding - #{filename}. for reals, yo!" load(filename) end end end