使用rbenv时,我遇到了捆绑器的问题。我之前从ruby 2.3.1切换到2.5.1,但是在尝试在ansible任务的shell脚本中运行bundler时,我注意到以下错误。
``` rbenv:包:找不到命令
The `bundle' command exists in these Ruby versions:
2.2.2
2.3.1
```
我看到了一些解决方案,在特定的ruby版本上,您必须安装捆绑器。但是,即使卸载并重新安装捆绑程序也无法解决问题。似乎由于某些宝石问题,我无法在特定的ruby版本上安装捆绑软件,因此重新安装捆绑软件对我无济于事。
答案 0 :(得分:0)
但是我确实找到了一个非常手动的解决方案。
我注意到rbenv whence bundle
是如何指定该捆绑软件在某些红宝石版本中有效的,而在其他版本中却无效。我跟踪了the portion of rbenv whence command to find out where it was looking,发现它位于rbenv下安装的每个ruby版本的以下路径下:~/.rbenv/versions/$VERSION/bin/
如果您在不带捆绑器的宝石路径下查找(对我来说是〜/ .rbenv / versions / 2.5.1 / bin /),您会发现它不存在。但是,在其他可以识别的版本下,您会看到可执行文件在那里(对我来说,它在~/.rbenv/versions/2.3.1/bin/bundle
和~/.rbenv/versions/2.3.1/bin/bundle
下)。
因此,我将可执行文件从有效的ruby版本复制到了已损坏的版本。然后,在文件顶部,您会注意到sha-bang设置为其他红宝石版本(对我来说,这是#!/Users/myuser/.rbenv/versions/2.3.1/bin/ruby
)。将版本路径更改为您要修复的ruby版本,然后它就会神奇地开始工作。
答案 1 :(得分:0)
我强烈建议您在没有rbenv的环境中运行ansible脚本。换句话说,最好使用无业游民或VM在其中练习脚本。
如果您的项目确实需要rbenv,请使用ansible rbenv库来处理它,但是在主机上运行它是一种危险的开发方式,因为它不容易逆转。
希望这会有所帮助!