Capistrano rbenv - Ruby 版本未安装干 运行

Capistrano rbenv - Ruby version not installed witn dry run

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

检查您的 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 中的最后一个设置

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

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

I assume with dry run it should use local environment.

这不是真的。

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

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

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

在dry-run场景中,这并没有真正执行。相反,Capistrano 只是打印命令并继续,就好像命令成功一样。

在这种特殊情况下,对于 [ ! -d ~/.rbenv/versions/2.4.3 ] 到 "succeed" 意味着 ~/.rbenv/versions/2.4.3 不存在。 rbenv 插件因此打印错误并停止部署。

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