Ruby on Rails迁移,将表更改为MyISAM
如何正确创建Rails迁移,以便在MySQL中将表更改为MyISAM? 它目前是InnoDB。 运行原始执行语句将更改表,但它不会更新db / schema.rb,因此当在测试环境中重新创建表时,它会返回InnoDB并且我的全文搜索失败。
如何更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库相应更新?
我没有找到一个很好的方法来做到这一点。 您可以像建议的那样更改schema.rb,然后运行: rake db:schema:load
,但是,这将覆盖您的数据。
我这样做的方式是(假设您正在尝试转换一个名为books的表):
-
从CLI保存现有数据:
CREATE TABLE tmp SELECT * FROM books;
-
在新的迁移文件中,删除books表并使用
:options => "ENGINE=MyISAM"
重新创建它,就像有人在评论中说的那样 -
复制内容:
INSERT INTO books SELECT * FROM tmp
我认为 ,如果您将架构格式( config.active_record.schema_format
)从:ruby更改为:sql,则所有sql都将保存在那里。
如果我是你,我会首先对一个新应用程序进行一些测试,看看它是如何工作的。