迁移到Rails 5之后,我发现schema.rb有额外的更改,例如options
参数,它添加了有关用于生成模式的数据库的信息。
create_table "student", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci" do |t|
t.integer "admission_id"
end
我们在Jenkins上使用SQLite3运行我们的RSpec单元测试,这些测试一直很顺利。但升级后,架构更改现在是特定于数据库的,这使我们对Jenkins的测试失败。
我想生成两个不同的模式文件(test_schema.rb,schema.rb),一个用于测试,另一个用于生产环境。有没有办法在运行rake db:schema:load时传递模式文件。
示例:
rake db:schema:load --schema-file test_schema.rb
如果有人可以分享如何使用两个不同的数据库,我也将不胜感激。我知道使用不同的数据库运行测试和生产并不是一个好习惯。
答案 0 :(得分:1)
Github rails/rails - Rails 5 schema.rb adding non-agnostic options. dev mysql -> test sqlite可能会引起人们的兴趣(在撰写本文时看似没有解决方案)。
我认为Rails真的希望schema.rb具有不可知性,几乎没有单独模式的能力,但是存在问题,我想很少有人在一个项目中实际使用多个数据库供应商。
我最好的建议是git忽略schema.rb
本身,然后在运行相关的rails db:*
命令之前和之后复制/重命名特定于DB的命令。