Ruby on rails 运行单元测试时辅助数据库的Rails迁移问题
我有一个Rails 4应用程序,它使用两个MySQL数据库(主数据库、辅助数据库)。这两个数据库都在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
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的单元测试部分有关。很抱歉,我误解了您最初的问题。看起来上面最后一条评论中链接的要点将使您走上正确的轨道。这是您需要重写/自定义的源代码调整大小以获得所需的行为: