我有一个应用程序需要在几个表上使用 MyISAM,但其余的都是传统的 InnoDB 类型。应用程序本身并不关心应用于这些记录的事务,但性能是一个问题。
但是,Rails 测试环境假定使用的引擎是事务性的,因此当从 schema.rb 生成测试数据库时,它会使用相同的引擎导入。是否可以以简单的方式覆盖此行为?
我采取了一种可怕的技巧,通过将其附加到 test_helper.rb 来确保表是正确的类型:
(ActiveRecord::Base.connection.select_values("SHOW TABLES") - %w[ schema_info ]).each do |table_name|
ActiveRecord::Base.connection.execute("ALTER TABLE `#{table_name}` ENGINE=InnoDB")
end
有没有更好的方法让 MyISAM 支持的模型可测试?