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