为什么active_storage:install的迁移(v5.2.1)运行时会生成无效的MySQL语法?

时间:2018-09-21 05:12:28

标签: mysql ruby-on-rails rails-migrations rails-activestorage ruby-on-rails-5.2

我已经将Rails 4.x应用程序升级到v5.2.1。升级进行得很好,应用运行良好。但是,我现在运行rails active_storage:install,它将创建一个迁移以为ActiveStorage创建表。

迁移创建良好,并且看起来还可以。但是,当运行rails db:migrate时,我得到:

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'string NOT NULL, `filename` string NOT NULL, `content_type` string, `metadata` t' at line 1: CREATE TABLE `active_storage_blobs` (`id` integer NOT NULL AUTO_INCREMENT PRIMARY KEY, `key` string NOT NULL, `filename` string NOT NULL, `content_type` string, `metadata` text, `byte_size` bigint NOT NULL, `checksum` string NOT NULL, `created_at` datetime NOT NULL, UNIQUE INDEX `index_active_storage_blobs_on_key`  (`key`)) ENGINE=InnoDB

显然,它会将t.string转换为“ CREATE TABLE(name string)<-” string“,而不是varchar之类的东西。

当我使用varchars而不是'string'手动运行此CREATE TABLE时,该表就很好创建了。

1 个答案:

答案 0 :(得分:0)

好的,我解决了它:这是由覆盖sql_type的猴子补丁引起的,这对于Rails 4.x中的utf8mb4修复主键类型是必需的。我已经删除了该初始化程序,并且迁移现在可以进行。感谢所有花时间思考的人。