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

使用Kamal v2部署Rails 8应用时遇ActiveRecord适配器未指定错误

Rails 8 + Kamal v2 kamal setup 数据库适配器错误解决思路

1. 检查 database.yml 的适配器配置

确保你的database.yml中生产环境明确指定Postgres适配器,避免遗漏或拼写错误:

production:
  adapter: postgresql
  database: <%= ENV.fetch("DATABASE_NAME") { "your_app_production" } %>
  username: <%= ENV.fetch("DATABASE_USERNAME") { "postgres" } %>
  password: <%= ENV.fetch("DATABASE_PASSWORD") %>
  host: <%= ENV.fetch("DATABASE_HOST") { "db" } %>
  port: <%= ENV.fetch("DATABASE_PORT") { 5432 } %>
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  • 重点确认adapter: postgresql行存在,不要写成postgres
  • 所有依赖的环境变量要能在容器中正常读取

2. 验证 Kamal deploy.yml 的数据库映射

Kamal需要正确传递数据库配置到容器,确保deploy.yml包含以下关键配置:

services:
  web:
    image: your-app-image
    env:
      clear:
        RAILS_ENV: production
      secret:
        - DATABASE_PASSWORD
        - RAILS_MASTER_KEY
    depends_on:
      - db

db:
  image: postgres:16-alpine
  env:
    clear:
      POSTGRES_DB: your_app_production
      POSTGRES_USER: postgres
    secret:
      - POSTGRES_PASSWORD
  volumes:
    - db_data:/var/lib/postgresql/data
  • 确认db服务的POSTGRES_DB、POSTGRES_USER与database.yml中的环境变量对应
  • 检查web服务的depends_on包含db,保证容器启动顺序正确

3. 排查 Postgres 容器退出码255的原因

退出码255通常是启动权限或配置错误,先查看容器日志定位问题:

kamal logs db

常见修复方案:

  • 数据卷权限问题:清理旧数据卷后重新部署
    kamal volume rm db_data
    kamal setup
    
  • 密码配置错误:确保POSTGRES_PASSWORD非空且符合Postgres规则
  • 端口冲突:修改deploy.yml中的端口映射,避免宿主机5432端口被占用
    db:
      ports:
        - "5433:5432"
    

4. 验证容器内环境变量加载

进入web容器,检查数据库相关环境变量是否存在:

kamal exec web printenv | grep DATABASE_
  • 如果变量缺失,检查deploy.yml的secret配置是否正确引用本地.env文件,或Kamal密钥管理是否配置正常
  • 确认RAILS_ENV设置为production,避免加载错误的数据库配置

5. 手动执行数据库准备命令调试

在web容器中手动运行db:prepare,获取更详细的错误信息:

kamal exec web bundle exec rails db:prepare

根据输出的具体提示,进一步定位环境变量未加载、数据库连接超时等问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:07