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

Ubuntu20.04下Rails项目执行Capistrano命令报LoadError加载config/deploy失败

问题根因定位

从你提供的堆栈输出可以直接定位核心问题,两个关键证据:

  • 堆栈首行标注(in /),代表Rake进程识别到的工作目录是系统根目录/,不是你实际存放Rails项目的路径
  • 堆栈中加载的Capfile路径为/Capfile,而非你项目根目录下的./Capfile

这两个点直接说明:Capistrano运行时根本没有找到你的项目目录,直接跳转到系统根目录加载了根路径下的Capfile,自然会报cannot load such file -- config/deploy——因为它在根目录下找config/deploy,当然找不到。
这也能解释为什么你降级Ruby、Rails版本,甚至新建空Rails项目都复现问题——因为错误发生在系统路径解析层,和项目本身的代码、依赖版本完全无关,你的怀疑方向(权限相关问题)是正确的。

常见触发原因
  • 目录遍历权限异常:从系统根目录到你项目所在路径的每一级父目录,只要存在某一级对当前执行用户没有开放遍历权限,Ruby的路径获取逻辑就会直接失败,自动将工作目录回落到系统根目录。这种问题和项目内部的文件权限无关,是上层目录的权限链路断了。
  • 根目录残留冗余配置:系统根目录下如果存在无主的Capfile、Rakefile文件,Rake在路径解析失败时会自动加载这些根目录下的配置,触发非预期的加载逻辑。
分步修复操作
  • 第一步:确认路径解析异常
    执行命令获取当前Ruby识别的工作目录:
    ruby -e "puts Dir.pwd"
    
    如果输出值不是你的项目根路径(而是/),就完全对应上了堆栈的异常表现。
  • 第二步:排查目录权限链路
    逐层检查从根目录到项目路径的每一级目录权限,比如项目存放在/home/mike/demo_app,就逐次执行:
    ls -ld /home /home/mike /home/mike/demo_app
    
    只要任意一级目录的权限没有对当前用户开放可遍历权限,就把对应目录的遍历权限补上,确保当前用户可以正常进入每一级目录。
  • 第三步:清除全局干扰文件
    检查系统根目录下是否存在无关的/Capfile、/Rakefile文件,如果存在就直接删除;同时检查家目录下的~/.rake全局配置文件,如果存在自定义的rake全局规则,临时重命名文件验证是否恢复。
  • 第四步:临时验证修复效果
    强制指定项目路径作为工作目录执行cap命令,绕过路径自动解析逻辑:
    bundle exec ruby -I. $(which cap) install --trace
    
    如果命令执行不再报之前的错误,就可以确认是路径解析的问题。
补充说明

你当前项目内的Capfile是Capistrano 3.x的标准格式,没有语法问题,不需要修改。只要路径解析恢复正常,执行bundle exec cap install就会自动在config目录下生成部署所需的配置文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 15:24:08