Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a custom seed file

I want to populate a new feature with dummy data, but don't want to use the db/seeds.rb file as it already has seeds other data irrelevant for this feature.

To run the default seeds.rb file, you run the command rake db:seed.

If I create a file in the db directory called seeds_feature_x.rb, what would the rake command look like to run (only) that file?

like image 967
Fellow Stranger Avatar asked Nov 09 '13 04:11

Fellow Stranger


People also ask

How to run custom seed file in Rails?

To run the default seeds. rb file, you run the command rake db:seed . If I create a file in the db directory called seeds_feature_x. rb , what would the rake command look like to run (only) that file?

What is the purpose of a seed file?

Seed files act as a template for a new design or sheet files containing information such as, working units, global origin, etc. Creating a new design file with the seed file and opening the new design file using with project configuration file(*.

What is a seed file Microstation?

A seed file is essentially a blank Microstation design file with the appropriate settings. Microstation seed files define the design plane, including appropriate dimensions, units, and origin.


2 Answers

Start by creating a separate directory to hold your custom seeds – this example uses db/seeds. Then, create a custom task by adding a rakefile to your lib/tasks directory:

# 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 

This rakefile accepts the name of a seed file in the db/seeds directory (excluding the .rb extension), then runs it as it would run seeds.rb. You can execute the rake task by issuing the following from the command line:

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

Update: Now it should also list the seed tasks when running rake --tasks or rake -T.

like image 137
zeantsoi Avatar answered Oct 03 '22 00:10

zeantsoi


I tried out zeantsoi's answer but it didn't give me what I wanted, it did all files in a directory. Hacked away at it and got this.

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 

And to use this do the following:

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

This will look in the Rails.root/db/seeds folder for a file name without the .seeds.rb (it adds those for you).

Working example:

rake db:seed:single SEED=my_custom_seed 

The above would seed the Rails.root/db/seeds/my_custom_seed.seeds.rb file

like image 32
Heath N Avatar answered Oct 03 '22 01:10

Heath N