Ajout d’un fichier de départ personnalisé

Je veux remplir une nouvelle fonctionnalité avec des données factices, mais je ne veux pas utiliser le fichier db / seeds.rb car il contient déjà des données non pertinentes pour cette fonctionnalité.

Pour exécuter le fichier seeds.rb par défaut, vous exécutez la commande rake db:seed .

Si je crée un fichier dans le répertoire de db appelé seeds_feature_x.rb , à quoi ressemblerait la commande rake pour exécuter (uniquement) ce fichier?

Commencez par créer un répertoire distinct pour stocker vos fichiers de départ personnalisés. Cet exemple utilise db/seeds . Ensuite, créez une tâche personnalisée en ajoutant un fichier rakefile à votre répertoire 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 

Ce rakefile accepte le nom d’un fichier de départ dans le répertoire db/seeds .rb (à l’exclusion de l’extension .rb ), puis l’exécute comme s’il seeds.rb . Vous pouvez exécuter la tâche de rake en émettant les éléments suivants à partir de la ligne de commande:

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

Mise à jour: Maintenant, il devrait également énumérer les tâches de départ lors de l’exécution des tâches – rake --tasks ou des rake -T .

J’ai essayé la réponse de zeantsoi mais cela ne m’a pas donné ce que je voulais, elle a fait tous les fichiers dans un répertoire. Je l’ai piraté et j’ai compris.

 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 

Et pour l’utiliser, procédez comme suit:

 rake db:seed:single SEED= 

Cela va chercher dans le dossier Rails.root / db / semences pour un nom de fichier sans le .seeds.rb (il ajoute ceux pour vous).

Exemple de travail:

 rake db:seed:single SEED=my_custom_seed 

Ce qui précède Rails.root/db/seeds/my_custom_seed.seeds.rb le Rails.root/db/seeds/my_custom_seed.seeds.rb

Trop compliqué! Je voulais juste une tâche simple pour exécuter tous les fichiers sous le répertoire db / de graines sans transmettre aucun nom de fichier.

 # 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