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

Railway部署Rails应用遇ActiveRecord::PendingMigrationError,求自动迁移方案

解决Railway部署Rails时自动执行数据库迁移的问题

核心问题说明

你之前在本地执行RAILS_ENV=development相关命令没用,是因为Railway部署的是生产环境(production),和本地开发环境完全独立,而且Railway默认用PostgreSQL作为生产数据库,和你本地的SQLite不是同一个数据库——本地操作根本影响不到部署后的服务器数据库。

自动执行迁移的具体方案

方法1:修改Railway的启动命令(最直接有效)

Railway允许自定义应用启动时执行的命令,把迁移操作和启动服务器的命令绑定在一起即可:

  1. 打开你的Railway项目控制台
  2. 进入「Settings」→「Start Command」
  3. 将默认启动命令替换为:
    bin/rails db:migrate && bin/rails server -p $PORT
    
    这样每次部署时,Railway会先执行数据库迁移,再启动Rails服务器,不会再出现迁移待处理的错误。

方法2:使用Build Command(可选,不优先推荐)

如果需要在构建阶段执行操作,也可以在「Settings」→「Build Command」中添加迁移命令,但更推荐用启动命令——因为构建阶段数据库可能还未就绪,容易出现连接问题。

额外注意事项

  • 生产环境不要用SQLite:Railway生产环境默认用PostgreSQL,只需在Gemfile中配置如下,Rails会自动适配:
    gem 'pg', group: :production
    gem 'sqlite3', group: :development
    
  • 无需删除本地SQLite文件:本地数据库和Railway的数据库完全独立,删除本地文件解决不了部署问题。
  • 本地可模拟生产环境测试迁移:执行RAILS_ENV=production bin/rails db:migrate,不过本地生产环境用的还是SQLite,和Railway的PostgreSQL可能存在小差异,基础迁移一般不会有问题。

验证生效方式

修改启动命令后,推送一次代码触发重新部署,查看Railway的日志,如果看到类似Migrating to CreateContacts (20221102234102)的内容,说明迁移已自动执行成功,应用也能正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:15:33