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

Azure应用服务Rails应用8080端口HTTP探测无响应求助

解决Azure App Service上Rails应用的端口探测失败问题

我之前也踩过一模一样的坑,本地跑起来顺得不行,一部署到Azure就报容器没响应8080端口的探测。给你几个具体的排查方向,按顺序试试:

1. 先确认Puma的绑定地址(最容易忽略的坑!)

很多人只改了端口,却没注意绑定地址是localhost——容器里的localhost是内部回环地址,Azure的探测请求根本访问不到。赶紧修改你的config/puma.rb:

# 替换原来的端口配置,必须绑定到0.0.0.0
bind "tcp://0.0.0.0:#{ENV.fetch("PORT") { 8080 }}"

这样Puma才会监听容器的所有网络接口,Azure的探测请求才能正常打进来。

2. 明确设置应用启动命令

Azure有时候会用默认的rails server启动应用,但这个命令可能不会正确加载你的puma配置。去App Service的「配置」→「常规设置」里,把启动命令改成:
bundle exec puma -C config/puma.rb
或者更直接一点,直接指定绑定地址和端口:
bundle exec puma -p 8080 -b 0.0.0.0
确保应用是用你配置好的Puma实例启动的。

3. 核对环境变量的优先级

Azure里的WEBSITES_PORT是告诉平台要探测哪个端口,而PORT是给你的Rails应用使用的,两者必须对应:

  • 在「配置」→「应用程序设置」里,设置WEBSITES_PORT = 8080
  • 同时设置PORT = 8080(或者保持你之前改的ENV.fetch("PORT") { 8080 },让应用从环境变量读取)
    改完后务必重启应用,然后去Kudu工具(https://<你的应用名>.scm.azurewebsites.net)的「环境」页面,确认这两个变量确实生效了——有时候配置没同步会坑死人。

4. 查看启动日志找线索

光看探测失败的提示没用,得看应用到底有没有正常启动:

  • 去Kudu的「日志流」,或者App Service的「日志」→「应用日志」,找Puma启动时的日志。如果看到Listening on tcp://0.0.0.0:8080,说明Puma监听正常;如果是localhost或者其他端口,那就是配置没生效。
  • 如果日志里有启动报错(比如依赖缺失、数据库连接失败),那才是根本问题——应用都没起来,探测肯定失败。

5. 调整健康检查路径

Azure默认探测/路径,但如果你的Rails根路径需要登录认证,或者有重定向,探测会返回非200状态码,直接判定失败。解决办法:

  • 在config/routes.rb里加一个简单的健康检查路由:
get '/health', to: ->(_req) { [200, {}, ['OK']] }
  • 然后去App Service的「配置」→「健康检查」里,把路径改成/health,这样探测就能稳定拿到200的响应了。

6. 给应用足够的启动时间

Rails应用启动时要预编译资产、初始化数据库连接,可能需要几十秒甚至几分钟。Azure默认的探测初始延迟可能太短,导致还没启动完就被判定失败。去「配置」→「健康检查」里,把「初始延迟」改成300秒(5分钟),给应用足够的启动时间。

按这个顺序排查下来,基本能解决问题。我当时就是因为绑定了localhost,折腾了大半天,改完绑定地址立刻就好了😂

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:22:44