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

Ruby on Rails报dir_initialize权限拒绝错误 chown命令修复无效

Ruby on Rails Errno::EACCES 权限报错排查解决

报错信息

运行Rails项目时触发如下错误:

in `initialize': Permission denied @ dir_initialize - /home/HirushaFernando/picq-web/db/store/397/397452a5-c254-4025-90cc-6884ae4eab04/202207_302756_302756_0 (Errno::EACCES)

此前尝试执行sudo chown -R User:User db/修复未生效。

排查步骤

  • 先确认Rails进程的实际运行用户:改错属主的核心原因通常是不知道服务实际跑在哪个账号下,如果你是用systemd、Puma、Nginx托管服务,运行用户可能是www-data、deploy等专用账号,并非你当前登录的用户。执行以下命令查看进程所属用户:
    ps aux | grep -E 'puma|rails|unicorn'
    
    输出结果第一列的用户名就是Rails进程的实际运行账号。
  • 校验全路径权限:不要只看db目录本身,从根目录到目标路径的任意一级没有执行权限,都会导致访问被拒。执行以下命令可以逐级列出路径所有层级的属主和权限:
    namei -l /home/HirushaFernando/picq-web/db/store/397/397452a5-c254-4025-90cc-6884ae4eab04/202207_302756_302756_0
    
    对照输出找到权限不匹配的层级即可。
  • 校验之前chown操作的有效性:你之前执行命令用的是相对路径db/,如果执行命令时不在项目根目录/home/HirushaFernando/picq-web下,修改的根本不是项目内的db目录;另外命令里写的User:User是占位符,Linux系统默认不存在名为User的用户,这也是操作不生效的常见原因。
  • 检查目录特殊属性:如果目录被加了不可修改(i)属性,即使是root用户也无法写入内容,执行以下命令查看属性:
    lsattr /home/HirushaFernando/picq-web/db/
    
    输出如果带i标记说明被加了锁。

修复操作

  • 进入项目根目录后,把你之前chown命令里的User替换成实际查到的Rails运行用户,比如运行用户是当前登录的hirusha,就执行:
    sudo chown -R hirusha:hirusha /home/HirushaFernando/picq-web/db/
    
    如果是Nginx+Puma部署的服务,运行用户通常是www-data,对应替换为www-data:www-data即可。
  • 递归给属主分配db目录的正确权限,注意用大写X避免给普通文件误加执行权限,比直接开777更安全:
    chmod -R u+rwX /home/HirushaFernando/picq-web/db/
    
  • 如果排查到上层目录(比如家目录/home/HirushaFernando)缺少执行权限,给对应层级补执行权限即可,不要随意修改系统目录权限:
    chmod u+x /home/HirushaFernando
    
  • 如果查到目录被加了不可修改属性,先递归移除属性再重新配置权限:
    sudo chattr -i -R /home/HirushaFernando/picq-web/db/
    

禁止为了省事直接给db目录设置777权限,生产环境这么做会有极大的数据泄露和篡改风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:20