我有seeds.rb
填充我的开发数据库。我知道我可以使用以下方法轻松地将seeds.rb
应用于我的测试数据库:
rake db:seed RAILS_ENV=test
但是,我想要一个 不同的 seeds.rb
文件来填充我的测试数据库。也许是seeds_test.rb
。这对于rails程序员来说一定是一个非常普遍的要求,不是吗?
如果没有简单的方法可以执行此操作,例如rake db:seed:seeds_test RAILS_ENV=test
,那么我将如何创建rake任务?我会在lib/tasks/test_seeds.rake
中想到这样的事情:
namespace :db do
desc "Seed data for tests"
task :seed_test => :environment do
load "#{Rails.root}/db/seeds_test.rb"
end
end
我认为它会起作用,但是我希望我的rake任务能够自动知道只将这个应用到测试数据库而不必指定:
rake db:seed_test RAILS_ENV=test
如何获取rake任务,以便我必须在命令行中输入:
rake db:seed_test
更新 :另一个stackoverflow问题与答案的位置相关联:
Rails.env = 'test'
不幸的是,它实际上并没有做任何事情(至少从Rails 4.2开始):(。
答案 0 :(得分:8)
在db/seeds.rb
中,测试Rails.env
的值并执行相应的种子播放:
#db/seeds.rb
case Rails.env
when 'development'
# development-specific seeds ...
# (anything you need to interactively play around with in the rails console)
when 'test'
# test-specific seeds ...
# (Consider having your tests set up the data they need
# themselves instead of seeding it here!)
when 'production'
# production seeds (if any) ...
end
# common seeds ...
# (data your application needs in all environments)
如果你想使用单独的文件,只需在这个结构中require
,例如:
#db/seeds.rb
case Rails.env
when 'development'
require 'seeds_development'
when 'test'
require 'seeds_test'
when 'production'
require 'seeds_production'
end
require 'seeds_common'
或更短
#db/seeds.rb
require "seeds_#{Rails.env}"
require 'seeds_common'
答案 1 :(得分:0)
如果您使用的是spring
,则可以set a Rails environment for a rake task:
# config/spring.rb
Spring::Commands::Rake.environment_matchers['db:seed_test'] = "test"
或匹配正则表达式模式的所有任务:
# config/spring.rb
Spring::Commands::Rake.environment_matchers[/^db:.+_test$/] = "test"
这允许你拨打
rake db:seed_test
让它在test
Rails环境中运行,从而写入test
数据库。
然而,这没有任何影响
spring
未用于耙子
或