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

DigitalOcean一键部署Rails应用时的健康检查错误求助

解决DigitalOcean一键部署Rails API的健康检查失败问题

1. 确认Rails服务的监听配置

DigitalOcean的应用平台要求服务监听0.0.0.0(而非localhost),且端口需匹配平台注入的PORT环境变量(默认8080)。

  • 检查config/puma.rb的绑定配置,确保内容为:
    bind "tcp://0.0.0.0:#{ENV.fetch("PORT") { 8080 }}"
    
  • 启动命令需明确绑定地址,比如使用rails server -b 0.0.0.0 -p ${PORT:-8080},避免仅绑定127.0.0.1导致外部无法访问。

2. 配置可访问的健康检查路由

若你的API未设置根路由/,需自定义健康检查路径:

  • 在config/routes.rb中添加极简健康检查路由:
    get "/health", to: proc { [200, {}, ["OK"]] }
    
  • 进入DigitalOcean应用设置,将健康检查路径改为/health,HTTP方法设为GET。

3. 修复环境变量覆盖问题

重点确认关键环境变量未被初始配置覆盖:

  • 在应用平台的环境变量面板中,设置RAILS_ENV=production、RAILS_SERVE_STATIC_FILES=true(API模式默认不提供静态文件,需开启以确保健康检查路由可访问)。
  • 不要手动覆盖PORT变量,让Rails自动读取平台注入的值。

4. 排查容器内部与外部的连通性

  • 使用doctl apps logs <你的应用ID>查看实时容器日志,确认Rails服务是否正常启动。
  • 进入容器内部执行curl http://localhost:${PORT}/health,若返回200则服务本身正常;若外部访问失败,检查Droplet防火墙规则,确保PORT端口的入站流量被允许。

5. 调整Rails生产环境的访问限制

  • 在config/environments/production.rb中,确保config.hosts未限制合法访问来源,可添加应用域名或Droplet IP:
    config.hosts << "你的应用域名.ondigitalocean.app"
    config.hosts << "你的Droplet公网IP"
    
  • 若启用了CORS,暂时关闭CORS配置测试是否为跨域规则导致健康检查失败。

6. 优化健康检查的超时与重试设置

在DigitalOcean应用设置中,延长健康检查超时时间(如从5秒改为10秒),增加重试次数,给Rails生产环境足够的启动时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:12:45