Ich möchte eine neue Funktion mit Dummy-Daten füllen, aber nicht die Datei db / seeds.rb verwenden, da sie bereits andere Daten enthält, die für diese Funktion irrelevant sind.
Um die Standarddatei seeds.rb
auszuführen, führen Sie den Befehl aus rake db:seed
.
Wenn ich eine Datei in dem db
Verzeichnis mit dem Namen seeds_feature_x.rb
aufstelle, wie würde der Befehl rake aussehen, um (nur) diese Datei auszuführen?
ruby-on-rails
ruby
ruby-on-rails-3.2
rake
seed
Fremder
quelle
quelle
seed
Datei? Haben Sie versucht, eine andere Methode vonseeds.rb
aufzurufen? Das letzte Mal habe ichseeds.rb
ein Import-Feature von einem anderen ModellAntworten:
Erstellen Sie zunächst ein separates Verzeichnis für Ihre benutzerdefinierten Seeds - in diesem Beispiel wird verwendet
db/seeds
. Erstellen Sie dann eine benutzerdefinierte Aufgabe, indem Sie Ihremlib/tasks
Verzeichnis eine Rake-Datei hinzufügen :# 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
Diese Rake-Datei akzeptiert den Namen einer Seed-Datei im
db/seeds
Verzeichnis (mit Ausnahme der.rb
Erweiterung) und führt sie dann so aus, wie sie ausgeführt werden würdeseeds.rb
. Sie können die Rechenaufgabe ausführen, indem Sie über die Befehlszeile Folgendes ausgeben:rake db:seed:file_name # Name of the file EXCLUDING the .rb extension
Update: Jetzt sollten auch die Startaufgaben beim Ausführen von
rake --tasks
oder aufgelistet werdenrake -T
.quelle
seed_file
mitfilename
(bearbeitet).intern
ist ein Alias fürto_sym
.custom_seed.rake
anstelle von aufrufencustom_seed.rb
(die Antwort ist korrekt, aber ich habe es trotzdem geschafft, dies zu verwechseln).Ich habe die Antwort von zeantsoi ausprobiert, aber sie hat mir nicht das gegeben, was ich wollte, sondern alle Dateien in einem Verzeichnis. Hackte es weg und bekam das.
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
Und um dies zu verwenden, gehen Sie wie folgt vor:
rake db:seed:single SEED=<seed_name_without_.seeds.rb>
Dadurch wird im Ordner Rails.root / db / seed nach einem Dateinamen ohne .seeds.rb gesucht (dieser wird für Sie hinzugefügt).
Arbeitsbeispiel:
rake db:seed:single SEED=my_custom_seed
Das obige würde die
Rails.root/db/seeds/my_custom_seed.seeds.rb
Datei setzenquelle
Zu kompliziert! Ich wollte nur eine einfache Aufgabe, um jede Datei im Verzeichnis db / seed auszuführen, ohne Dateinamen zu übergeben.
# 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
quelle