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

Rails 5+/6 rbenv+Passenger环境bin/ruby权限不足引发500错误求助

错误原因

报错日志明确指向Ruby可执行文件权限不足:

App 735 output: /bin/sh: 1: exec: /root/.rbenv/versions/2.7.3/bin/ruby: Permission denied

核心触发原因有两个:

  • rbenv被安装在/root目录下,Linux系统默认root家目录的权限为700,仅root用户自身拥有读、写、执行权限,其余所有用户都没有访问权限
  • Passenger工作进程不会以root身份运行,默认会使用站点配置中指定的普通用户(如www-data、deploy等)启动,这类用户无权访问/root目录下的资源,因此执行Ruby二进制文件时被系统拦截
解决方案

优先选择方案1,符合生产环境安全规范;方案2仅可用于临时验证,不建议在生产环境使用。

方案1:迁移rbenv到普通用户家目录(推荐)

操作步骤:

  • 新建专属部署用户,避免用root运行业务服务:
    useradd -m deploy
    
  • 切换到deploy用户,重新安装rbenv及对应版本的Ruby环境,执行su - deploy后按照rbenv安装流程完成2.7.3版本Ruby、对应版本bundler、项目依赖的安装
  • 修改Passenger对应的Web服务(Nginx/Apache)站点配置,更新Ruby路径参数:
    # Nginx配置示例,Apache配置对应修改passenger_ruby参数即可
    passenger_ruby /home/deploy/.rbenv/versions/2.7.3/bin/ruby;
    
  • 调整Rails项目目录的所属权限,保证deploy用户有完整访问权限:
    chown -R deploy:deploy /path/to/your/rails/project
    
  • 重启Web服务和Passenger,验证站点访问是否正常

方案2:调整目录权限(仅临时验证用)

如果需要快速验证问题根因,可以临时调整权限,生产环境使用会带来严重安全风险:

  • 开放root家目录的读执行权限:
    chmod 755 /root
    
  • 递归开放rbenv目录的公共读执行权限:
    chmod -R o+rx /root/.rbenv
    
  • 重启服务验证是否恢复访问
额外排查点

如果调整权限后仍报错,可检查系统是否开启了SELinux(常见于CentOS/RHEL系列系统):

  • 临时关闭SELinux验证:
    setenforce 0
    
  • 若关闭后恢复正常,需要给rbenv目录、项目目录配置正确的SELinux上下文,或者按需调整SELinux策略即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:48:02