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

部署Ruby on Rails至Railway遇PostgreSQL配置崩溃错误求助

问题解决指南

1. 先搞定DATABASE_URL的URI错误

从崩溃日志能看到URI::InvalidURIError,根本问题出在DATABASE_URL里的PGPASSWORD变量语法写错了:
你原来写的是:

DATABASE_URL=postgresql://${{ PGUSER }}:{{ PGPASSWORD }}@${{ PGHOST }}:${{ PGPORT }}/${{ PGDATABASE }}

注意{{ PGPASSWORD }}前面少了个$,得改成${{ PGPASSWORD }},正确的写法是:

DATABASE_URL=postgresql://${{ PGUSER }}:${{ PGPASSWORD }}@${{ PGHOST }}:${{ PGPORT }}/${{ PGDATABASE }}

变量没正确解析,导致密码部分直接变成了{{ PGPASSWORD }}字符串,把整个数据库连接URI搞废了,这才引发的错误。

2. 必须把sqlite3换成PostgreSQL

Gemfile里的gem 'sqlite3', '1.4'绝对是生产环境的大忌,和你的问题直接相关,生产环境不能用SQLite,理由很实在:

  • SQLite是单文件数据库,Railway用容器部署,容器重启或者加实例的时候,数据库文件直接丢了,数据根本存不住;
  • SQLite扛不住并发请求,生产环境多用户访问的时候,会锁死、卡成狗;
  • 你已经在Railway配置了PostgreSQL的变量,完全匹配,必须换对应的gem。

切换步骤:

  1. 修改Gemfile,按环境区分数据库gem:
# Gemfile
group :development, :test do
  gem 'sqlite3', '1.4'
end

group :production do
  gem 'pg', '~> 1.4'
end
  1. 改config/database.yml,让生产环境直接读DATABASE_URL变量:
# config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>
  1. 把修改提交到GitHub,重新让Railway部署就行。

3. 额外优化建议

  • 确认Railway的PostgreSQL服务已经正常跑起来,PGHOST、PGPORT、PGPASSWORD这些变量和服务给的信息完全对得上;
  • Procfile的启动命令可以改改,别每次启动都跑migrate(重复迁移可能出问题),改成:
web: bin/rails server -b 0.0.0.0 -p $PORT

migrate可以放到Railway的构建阶段,或者手动执行一次就行,不用每次启动都跑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:40