Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在不指定其他参数的情况下仅为测试数据库设定种子?_Ruby On Rails_Ruby_Ruby On Rails 4_Mysql2_Seeding - Fatal编程技术网

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