You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 8.0升级后SQLite环境下db:schema:load因schema.rb中:size键报错的问题咨询

Rails 8.0升级后SQLite环境下db:schema:load因schema.rb中:size键报错的问题咨询

我最近把Rails从6.1版本升级到了8.0.2,测试环境一直用的是SQLite,结果在GitHub Actions的CI流程里执行bin/rails db:create db:schema:load时直接报错终止了。

具体报错信息如下:

Created database 'db/test.sqlite3'
bin/rails aborted!
ArgumentError: Unknown key: :size. Valid keys are: :limit, :precision, :scale, :default, :null, :collation, :comment, :primary_key, :if_exists, :if_not_exists, :as, :type, :stored
raise ArgumentError.new("Unknown key: #{k.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}")

查看我的schema.rb后发现,里面有大量类似这样的配置行:

t.text "content", size: :long

这在旧版Rails里完全正常,但Rails 8.0已经不再认可size这个配置键了。我本来写了个迁移想把size替换成limit,但发现执行db:schema:dump时,Rails还是会给SQLite的大文本列生成size: :long的配置——等于dump出来的schema里带着loader不接受的键,陷入了死循环:手动改schema.rb没用,dump一下就打回原形;写迁移改limit也拦不住SQLite环境下size再次出现。

我的环境配置:

  • Ruby 3.3.9
  • Rails 8.0.2
  • SQLite3 gem 2.0.2
  • RSpec 8.0.2

现在想请教几个问题:

  1. 这是Rails 8的有意改动吗?有没有官方文档对此做说明?
  2. 推荐的修复方案是什么?
    • 我更想保持现有配置的简洁性,不想换成structure.sql(虽然很多LLM都建议这么做)
    • 难道只能换掉测试环境的数据库才能解决吗?
  3. 有没有兼容Rails 8的方式,能让SQLite和schema.rb继续正常配合使用?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:39:33