ruby - Vagrant provisioning 预装时找不到rvm

标签 ruby linux bash vagrant rvm

我正在使用 Vagrant box“thdengops/ubuntu-14.04-dev”,它附带:git、openjdk7、docker、gvm (go)、nvm (node)、rvm (ruby)、jenv (java)、virtualenv (python) 全部预装在盒子上。

我创建了一个配置 shell 脚本,它尝试使用 rvm 安装 Ruby 2.5.1,然后将其设置为当前使用的 ruby​​ 版本。然而,供应脚本失败并提示 rvm: command not found。我知道它的安装就像我在没有配置的情况下 vagrant up 然后我可以手动完成所有操作。我很确定这是我做错了一些许可的事情,但我对 Vagrant 很陌生,目前还不是 bash/linux 的专家。

知道我做错了什么导致了这些错误吗?我已经在下面粘贴了完整的 vagrantfile 和 provision 脚本,您应该能够将它们放入最新的 vagrant 中以重现错误。

Vagrant 文件:

Vagrant.configure(2) do |config|
  config.vm.box = "thdengops/ubuntu-14.04-dev"

  config.vm.provision "shell", path: "provision.sh"
end

provision.sh

#!/bin/bash
RUBY_VERSION="2.3.1"

apt-get -y update

if ! rvm list rubies ruby | grep ruby-${RUBY_VERSION}; then
  rvm install ${RUBY_VERSION}
fi

rvm --default use ${RUBY_VERSION}

gem install bundler

来自终端的错误

==> default: /tmp/vagrant-shell: line 6: rvm: command not found
==> default: /tmp/vagrant-shell: line 7: rvm: command not found
==> default: /tmp/vagrant-shell: line 10: rvm: command not found

最佳答案

很可能已经为 vagrant 用户安装了软件包,因此当您通过 ssh 进入该框时,vagrant 用户将能够运行该命令。但是配置默认由 root 运行,所以你需要 vagrant 来运行这个配置

config.vm.provision "shell", privileged: false, path: "provision.sh"

在这种情况下,您需要确保使用 sudo 运行一些命令,例如 apt 命令

关于ruby - Vagrant provisioning 预装时找不到rvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016362/

相关文章:

ruby - 如何获取用 | 分隔的字符串或者 ,

linux - 如何在 SED 中使用 AWK

bash - 如何以正确的格式发送邮件

linux - 如何从 URL 捕获文件大小并在 Shell 脚本中使用它

ruby-on-rails - 非常基本的 : "syntax error, unexpected ' =', expecting end-of-input"

ruby-on-rails - 部署到服务器后访问 Rails 控制台

ruby - 如何使用 Capybara 在下拉菜单中选择选项

linux - Eclipse 3.8 的 CSS 文件位于哪里?

node.js - 生成可执行文件时 Docker-compose EACCESS 错误

linux - 如何在 linux 中打开程序时运行 bash 脚本