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

Why does active_storage:install's migration (v5.2.1) generate invalid MySQL syntax when run?

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

迁移创建良好,看起来不错。但是,当 运行ning 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' 创建 TABLE 时,table 可以正常创建。

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