Ruby on rails 是否有方法传递rake db:schema:load的选项文件
迁移到Rails 5后,我发现schema.rb有额外的更改,例如Ruby on rails 是否有方法传递rake db:schema:load的选项文件,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,迁移到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单元测试,该测试一直运行顺利。但是在升级之
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
如果有人能分享如何使用两个不同的数据库,我也将不胜感激。我知道使用不同的数据库运行测试和生产不是一个好的做法 可能会引起兴趣(在撰写本文时是开放的,似乎没有解决方案)
我认为Rails真的希望schema.rb是不可知的,几乎没有能力拥有单独的模式,但是有一些问题,我想很少有人在一个项目中使用多个数据库供应商
我的最佳建议是git忽略
schema.rb
本身,然后在运行相关的rails DB:
命令之前和之后复制/重命名特定于DB的命令。另外,rake
命令现在统一在rails
下。e、 g.rails生成迁移…
,rails数据库:迁移
,rails服务器
,等等。Git忽略在我的情况下是有意义的:)也可以在rails/rails中进行回复。我还刚刚意识到,由于您特别提到了SQLite3,国外的关键问题也可能会让您焦头烂额。你真的需要DB级别的外键,除非你想因为ActiveRecord的竞争条件而担心每个关系都可能为零、孤儿记录等等。但是,如果您不小心,SQLite中的schema.rb会删除它们,即使现代SQLite支持外键。