Ruby on Rails迁移,将表更改为MyISAM

如何正确创建Rails迁移,以便在MySQL中将表更改为MyISAM? 它目前是InnoDB。 运行原始执行语句将更改表,但它不会更新db / schema.rb,因此当在测试环境中重新创建表时,它会返回InnoDB并且我的全文搜索失败。

如何更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库相应更新?

我没有找到一个很好的方法来做到这一点。 您可以像建议的那样更改schema.rb,然后运行: rake db:schema:load ,但是,这将覆盖您的数据。

我这样做的方式是(假设您正在尝试转换一个名为books的表):

  1. 从CLI保存现有数据: CREATE TABLE tmp SELECT * FROM books;

  2. 在新的迁移文件中,删除books表并使用:options => "ENGINE=MyISAM"重新创建它,就像有人在评论中说的那样

  3. 复制内容: INSERT INTO books SELECT * FROM tmp

认为 ,如果您将架构格式( config.active_record.schema_format )从:ruby更改为:sql,则所有sql都将保存在那里。

如果我是你,我会首先对一个新应用程序进行一些测试,看看它是如何工作的。