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

Rails纯API应用部署Render遇端口及权限错误求助

解决Render部署Rails纯API的两个报错:权限拒绝与端口未检测到

错误1:./bin/rails: Permission denied

该问题源于Windows风格的脚本头与文件权限配置:

  1. 修正bin/rails的shebang行
    你的bin/rails脚本开头是Windows环境的#!/usr/bin/env ruby.exe,而Render基于Linux服务器,需修改为:
#!/usr/bin/env ruby
APP_PATH = File.expand_path("../config/application", __dir__)
require_relative "../config/boot"
require "rails/commands"
  1. 确保脚本具备可执行权限
    任选以下一种方式处理:
  • 本地执行命令后提交到GitHub:
    chmod +x bin/*
    git add bin/
    git commit -m "Fix bin scripts permissions"
    git push
    
  • 或在render.build.sh中添加权限设置步骤:
    #!/usr/bin/env bash
    set -o errexit
    
    bundle install
    chmod +x bin/*  # 新增该行
    # bundle exec rails assets:precompile  # API应用可注释,若有静态资源则取消注释
    # bundle exec rails assets:clean
    bundle exec rake db:migrate
    

错误2:No open ports detected

Render要求应用监听公开端口(0.0.0.0而非localhost),且必须使用平台提供的PORT环境变量:

  1. 修正Puma绑定配置
    在config/puma.rb中,将端口配置改为明确绑定到0.0.0.0,确保Render能检测到:
# 替换原port行
bind "tcp://0.0.0.0:#{ENV.fetch("PORT") { 3001 }}"

Render会自动注入PORT值(通常为10000+),无需手动指定固定端口。

  1. 确认启动命令正确
    在Render的应用设置中,将启动命令设置为:
bundle exec puma -C config/puma.rb

避免直接使用./bin/rails server,确保Puma严格按照配置文件启动。

  1. 修正production.rb中的域名配置
    将default_url_options[:host]改为Render分配的域名,或用环境变量动态获取:
Rails.application.routes.default_url_options[:host] = ENV['RENDER_EXTERNAL_HOSTNAME'] || 'your-app.onrender.com'

(此配置不直接影响端口检测,但可避免后续请求路径错误)

额外检查项

  • 在Render的环境变量中添加RAILS_MASTER_KEY,值为本地config/master.key的内容,确保生产环境能解密配置。
  • 确认production.rb中config.eager_load = true已开启,生产环境需要预加载代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:35:05