【问题标题】:Capistrano rbenv - Ruby version not installed witn dry runCapistrano rbenv - Ruby 版本未在空运行时安装
【发布时间】:2025-12-27 21:00:12
【问题描述】:

当我使用空运行运行 Capistrano 任务时,它告诉我找不到 rbenv Ruby 版本。我假设空运行它应该使用本地环境。但是当我在本地运行命令时,我可以很容易地找到下面提到的目录并安装了 Ruby。

> ./bin/bundle exec cap --dry-run development t

DEBUG [8171d925] Running [ ! -d ~/.rbenv/versions/2.4.3 ] as user@dev
DEBUG [8171d925] Command: [ ! -d ~/.rbenv/versions/2.4.3 ]
ERROR rbenv: 2.4.3 is not installed or not found in ~/.rbenv/versions/2.4.3

> ls ~/.rbenv/versions/2.4.3
bin include lib share

> rbenv global
2.4.3

> ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin16]

> bundle info capistrano
* capistrano (3.4.0)

我的 Capfile 包含以下几行。

require 'capistrano/rbenv'
set :rbenv_type, :user
set :rbenv_ruby, '2.4.3'

我使用的是 Mac OS,并使用自制软件安装了 rbenv。

【问题讨论】:

    标签: ruby-on-rails capistrano rbenv


    【解决方案1】:

    检查您的 PATH 并确保它包含 $HOME/.rbenv/shims$HOME/.rbenv/bin

    要查看您的路径,请执行以下操作:

    $ echo $PATH

    还要检查您的 ~/.bash_profile 中是否包含以下内容

    export PATH="$HOME/.rbenv/bin:$PATH"
    eval "$(rbenv init -)"
    

    要检查 bash 配置文件,请在终端中输入:

    touch ~/.bash_profile; open ~/.bash_profile
    

    确保它是 ~/.bash_profile 中的最后一个设置

    【讨论】:

      【解决方案2】:

      capistrano/rbenv 中一定有一些错误。我已将我的 Gemfile 更改如下,问题已解决。

      # gem 'capistrano-rbenv', '2.0.2'
      gem 'capistrano-rbenv', '~> 2.1'
      

      【讨论】:

        【解决方案3】:

        我假设试运行它应该使用本地环境。

        这不是真的。

        Capistrano 试运行只是打印出它将在实际部署中运行的远程命令,但它确实会执行它们(本地或其他方式)。

        由于 Capistrano 不执行任何命令,任何依赖这些命令结果的插件都可能无法工作。例如,rbenv 插件显然期望运行这个命令:

        [ ! -d ~/.rbenv/versions/2.4.3 ]
        

        在试运行的情况下,这实际上并没有执行。相反,Capistrano 只是打印命令并继续,就像命令成功一样。

        在这种特殊情况下,[ ! -d ~/.rbenv/versions/2.4.3 ] 为“成功”意味着~/.rbenv/versions/2.4.3 不存在。 rbenv 插件因此会打印错误并停止部署。

        总结一下:在实践中,--dry-run 选项并不是特别有用。

        【讨论】:

        • 说“本地”是指它无法连接到任何地方——经过几次测试,我可以确认这是真的。可能正如您所说,并且 capistrano-rbenv 行为已得到修复。无论哪种方式,将其升级到最新版本都不会产生任何错误并且可以正常完成,因此我可以看到所有执行的命令。