Ruby on rails 如何在不指定其他参数的情况下仅为测试数据库设定种子?
是否有一种配置方法,使其仅在我的测试数据库中播种?我知道有一种方法可以指定环境,如:Ruby on rails 如何在不指定其他参数的情况下仅为测试数据库设定种子?,ruby-on-rails,ruby,ruby-on-rails-4,mysql2,seeding,Ruby On Rails,Ruby,Ruby On Rails 4,Mysql2,Seeding,是否有一种配置方法,使其仅在我的测试数据库中播种?我知道有一种方法可以指定环境,如: 但是有没有一种方法可以使seed\u fu混淆,将测试环境用作默认环境,这样我就不需要一直指定它?在seed\u fu任务中,您可以显式设置环境: Rails.env = 'test' 为了完成您需要的任务,我将把种子任务包装如下: namespace :db do task :custom_seed => :environment do Rails.env = 'test' Rak
但是有没有一种方法可以使seed\u fu混淆,将测试环境用作默认环境,这样我就不需要一直指定它?在seed\u fu任务中,您可以显式设置环境:
Rails.env = 'test'
为了完成您需要的任务,我将把种子任务包装如下:
namespace :db do
task :custom_seed => :environment do
Rails.env = 'test'
Rake::Task["db:seed_fu"].execute
end
end
然后打电话:
rake db:custom_seed
我发现,通过将装置放置在特定于环境的子目录中,如
/lib/fixtures/test
/lib/fixtures/development
/lib/fixtures/production
消除了在错误环境中激活错误装置的可能性,这也是我的主要问题之一。仍然-在该变体中运行seed_-fu时必须指定环境。它只是消除了在错误环境中运行错误装置的可能性
放置在lib/Fixtures
正下方的Fixtures将始终运行-看起来像是要在所有环境中保留的常规Fixtures的位置
有关更多信息,请查找seed\u fu gem和seed\u fu gem。刚刚通过在子shell中执行命令发现了另一种方法:
namespace :db do
desc "Seed_fu only in test-database"
task seed_fu_test: :environment do
system("rake db:seed_fu RAILS_ENV=test")
end
end
rake-T
对seed\u-fu命令的描述如下:rake db:seed\u-fu\加载当前环境的种子数据
。默认情况下,我在开发
环境中工作。在种子任务
下,您是指我的种子文件吗?如果是这样的话,那么我知道我应该在每个种子文件中分别指定Rails.env
——有没有一种方法可以在一个地方完成呢?很好的方法!经过测试,效果良好。但是,是否可以在相同的seed\u-fu
命令下定义要测试的环境?我希望避免我的同事意外地在开发库中播种的情况,因为他们不知道有一个新的特定命令只用于播种测试库。我试图用完全相同的名称添加一个新的rake任务,但这当然会导致堆栈级别太深
错误,因为最后我想用rake::task[“db:seed\u fu”]调用原始seed\u fu命令。执行
。是的,您会得到这样的递归。我认为唯一的方法是重命名现有的seed_______________________________。这有点混乱,但我认为可行:
namespace :db do
desc "Seed_fu only in test-database"
task seed_fu_test: :environment do
system("rake db:seed_fu RAILS_ENV=test")
end
end