Ruby On Rails: way to create different seeds file for environments

后端 未结 2 1288
孤独总比滥情好
孤独总比滥情好 2021-01-31 04:41

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

相关标签:
2条回答
  • 2021-01-31 04:57

    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 
    
    0 讨论(0)
  • 2021-01-31 05:10

    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.

    0 讨论(0)
提交回复
热议问题