Ruby on rails 运行单元测试时辅助数据库的Rails迁移问题

Ruby on rails 运行单元测试时辅助数据库的Rails迁移问题,ruby-on-rails,ruby,unit-testing,migration,database-migration,Ruby On Rails,Ruby,Unit Testing,Migration,Database Migration,我有一个Rails 4应用程序,它使用两个MySQL数据库(主数据库、辅助数据库)。这两个数据库都在database.yml文件中针对开发、生产和测试环境进行了配置: development: ... database: primary ... production: ... database: primary ... test: ... database: primary ... secondary_development: ... databa

我有一个Rails 4应用程序,它使用两个MySQL数据库(主数据库、辅助数据库)。这两个数据库都在
database.yml
文件中针对开发、生产和测试环境进行了配置:

development:
  ...
  database: primary
  ...

production:
  ...
  database: primary
  ...
test:
  ...
  database: primary
  ...

secondary_development:
  ...
  database: secondary
  ...

secondary_production:
  ...
  database: secondary
  ...

secondary_test:
  ...
  database: secondary
  ...
目前,我只有一个模型存储在辅助数据库中。下面是为该模型创建表的迁移代码:

class CreateTags < ActiveRecord::Migration
 ActiveRecord::Base.establish_connection "secondary_#{Rails.env}"
 def change
   create_table :tags do |t|
     t.string :name
     t.integer :account_id
     t.timestamps
   end
 end
end
class CreateTags
当我运行
rakedb:migrate
时,在辅助数据库中正确创建了表。但是,当我第二次运行
rake db:migrate
时,它向我显示了一个错误
表已经存在
,我认为这与rake任务将迁移版本添加到主数据库的版本表这一事实有关。我现在忽略这一点

但是,当我使用
rake test test=test/path_to_test_file.rb运行某个单元测试时,它向我显示一个错误,即辅助数据库中不存在
标记表。我检查了日志,发现创建了
标记
表,但在主数据库中,这是错误的

因此,简而言之,如何更改迁移代码以确保始终在辅助数据库中创建
标记

我试过:

但这对我不起作用:(

更新1:
根据@User089247的建议,我试着运行RAILS\u ENV=test rake db:create和RAILS\u ENV=test rake db:migrate。它说我的主数据库已经创建了,这是真的,但它没有提到我的辅助数据库,因为辅助数据库有单独的配置
secondary\u test
e可以创建自定义rake任务(或覆盖现有任务),但此taks应该由
rake test
使用。是否可能?或者我是否遗漏了一些内容?

这里您要做的是指定模型上辅助数据库的用法,而不仅仅是在迁移中:

class Tag < ActiveRecord::Base
  establish_connection "secondary_#{Rails.env}" 
end
class标记

如果您打算使用多个模型的辅助数据库,本博客文章提供了一些有用的附加信息:

您是否也运行了:
$RAILS\u ENV=test rake db:create
,然后
$RAILS\u ENV=test rake db:migrate
?我没有尝试过,但根据我的理解,它应该可以帮助我解决运行r的问题ake db:migrate。这个问题现在对我来说并不重要,所以重点是rake test的问题。这种测试看起来像你正在尝试做的,还有你的数据库。yml在每个环境中指定辅助数据库,这对我来说似乎很奇怪。感谢你的回复,但是建立连接已经添加到标记模型和标记中tity可以在Rails应用程序中正确保存、检索和删除。我面临的问题与Rails的单元测试部分有关。很抱歉,我误解了您最初的问题。看起来上面最后一条评论中链接的要点将使您走上正确的轨道。这是您需要重写/自定义的源代码调整大小以获得所需的行为: