How can one make the task rake db:seed
to use different seeds.rb file on production and development?
edit: any better strategy will be welcome
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?
Rails seed files are a useful way of populating a database with the initial data needed for a Rails project. The Rails db/seeds. rb file contains plain Ruby code and can be run with the Rails-default rails db:seed task.
The seeds.rb file is where the seed data is stored, but you need to run the appropriate rake task to actually use the seed data. Using rake -T in your project directory shows information about following tasks: rake db:seed. Load the seed data from db/seeds.rb.
You can have a rake task behave differently based on the current environment, and you can change the environment a task runs in by passing RAILS_ENV=production
to the command. Using these two together you could produce something like so:
Create the following files with your environment specific seeds:
db/seeds/development.rb db/seeds/test.rb db/seeds/production.rb
Place this line in your base seeds file to run the desired file
load(Rails.root.join( 'db', 'seeds', "#{Rails.env.downcase}.rb"))
Call the seeds task:
rake db:seed RAILS_ENV=production
I like to implement all seeds inside one seed.rb
file and then just separate the environments inside.
if Rails.env.production? State.create(state: "California", state_abbr: "CA") State.create(state: "North Dakota", state_abbr: "ND") end if Rails.env.development? for 1..25 Orders.create(order_num: Faker::Number:number(8), order_date: Faker::Business.credit_card_expiry_date) end end
That way you do not need to cast the RAILS_ENV property on your rake task, or manage multiple files. You also can include Rails.env.test?
, but I personally let RSPEC take care of the testing data.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With