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

使用Padrino+SQLite3+ActiveRecord执行迁移/Schema导出时报错求助

解决Padrino+ActiveRecord迁移/Schema导出报错问题

核心原因

你的问题源于Padrino内置的ActiveRecord rake任务与当前使用的ActiveRecord版本不兼容。ActiveRecord在大版本迭代中调整了SchemaMigration类的方法以及连接池的API,而Padrino的任务逻辑未同步适配这些变更,导致调用了已被移除或修改的方法。

解决方案

1. 锁定兼容的ActiveRecord版本

Padrino对ActiveRecord的支持有明确的版本匹配要求,根据你使用的Padrino版本调整AR版本:

  • Padrino 0.15.x 适配 ActiveRecord 6.x 系列
  • Padrino 0.14.x 适配 ActiveRecord 5.x 系列

修改项目的Gemfile,指定对应版本:

# 对应Padrino 0.15.x
gem 'activerecord', '~> 6.1.7'
# 或对应Padrino 0.14.x
gem 'activerecord', '~> 5.2.8'

执行命令更新依赖:

bundle update activerecord

2. 替代方案:使用ActiveRecord原生命令

Padrino的AR任务是对AR原生命令的封装,你可以直接跳过Padrino的封装,使用AR原生rake命令:

# 执行数据库迁移
bundle exec rake db:migrate
# 导出Schema文件
bundle exec rake db:schema:dump

执行前确保PADRINO_ENV环境变量设置正确(比如PADRINO_ENV=development),且config/database.yml中的SQLite3配置路径可读写:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

3. 手动修复Padrino任务(仅当无法降级AR时使用)

如果必须使用高版本ActiveRecord,可手动修改Padrino的AR任务代码:

  • 针对ar:migrate的create_table错误:
    替换@schema_migration.create_table为直接通过连接创建表:
    ActiveRecord::Base.connection.create_table :schema_migrations, id: false do |t|
      t.string :version, null: false
    end
    ActiveRecord::Base.connection.add_index :schema_migrations, :version, unique: true
    
  • 针对ar:schema:dump的with_connection错误:
    将pool.with_connection替换为ActiveRecord::Base.connection,或使用适配器的raw_connection方法执行操作。

验证

完成上述操作后,重新运行迁移命令:

padrino rake ar:migrate

若仍有问题,检查SQLite3数据库文件所在目录的读写权限,确保进程有权限创建或修改数据库文件。

内容的提问来源于stack exchange,提问作者user29559775

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:43:18