4

我可以手动运行bundle install并恢复正常,但是当我让 Puppet 提供一个 Vagrant 框时,这会发生第二次(第一次我得到成功的输出)。

[default] Running provisioner: Vagrant::Provisioners::Puppet...
[default] Running Puppet with /tmp/vagrant-puppet/manifests/default.pp...
stdin: is not a tty
/opt/vagrant_ruby/lib/ruby/site_ruby/1.8/rubygems.rb:900:in `report_activate_error': Could not find RubyGem puppet (>= 0) (Gem::LoadError)
    from /opt/vagrant_ruby/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
    from /opt/vagrant_ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1276:in `gem'
    from /opt/vagrant_ruby/bin/puppet:18
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

我没有在任何地方请求 puppet gem,它不在我的 Gemfile 中,我的清单也不需要它。为什么要寻找 puppet gem,我该如何摆脱这个错误?

4

3 回答 3

3

我正在使用https://github.com/blt04/puppet-rvm为我的 Vagrant 盒子配置 RVM,我遇到了同样的问题。取消设置“default_use => true”确实可以解决它。不幸的是,一旦您 ssh 进入该框,您就必须手动选择您的目标 Ruby。

或者,您可以将 puppet gem 显式添加到清单中的默认 Ruby(不添加到任何 gemset,仅添加到 Ruby 本身)。它仍然一直困扰着我关于 hiera (??) 丢失的一些配置文件,但它似乎仍然有效。

我想知道 Vagrant 上的 RVM 是否值得麻烦。创建 Vagrant 盒子的全部意义在于为单个项目提供一个独立的环境,那么为什么我需要多个 Rubies/Gemsets 呢?

于 2013-05-17T21:19:31.913 回答
2

Puppet 由您的虚拟机在您的虚拟机上运行。确保仍然为用户 vagrant 和 root 安装 gem。它也可能是您的默认 ruby​​ 版本的开关(系统与通过 rvm 或 rbenv 安装?)。

希望这可以帮助。

于 2012-08-22T15:00:04.587 回答
0

Puppet 预计将由 vagrant 使用系统 ruby​​ 运行,但 RVM 可能默认为您选择的已安装 ruby​​。为了解决这个问题,我做了这个(一个非常丑陋的黑客),同时在正常登录时仍然有一个默认的 ruby​​:

在您的流浪文件中:

  # setup working dir only to exploit in below
  working_dir = '/home/vagrant/puppet'
  config.vm.provision :shell, :inline => "mkdir -p #{working_dir}"

  config.vm.provision "puppet" do |puppet|
    # [ ... Your config ... ] 

    # before puppet is run, vagrand `cd`s into the working directory, failing to escape it. 
    puppet.working_directory = "#{working_dir}; rvm use system || true"
  end

由于 vagrant puppet 提供程序(https://github.com/mitchellh/vagrant/blob/master/plugins/provisioners/puppet/provisioner/puppet.rb#L154)中的一个转义错误/功能,这会导致 vagrant

  1. 从加载并配置默认值的 rvm 开始
  2. 切换到给定目录
  3. 切换到系统ruby,重新找到gem
  4. 像第一次运行一样运行 puppet,没有任何 RVM-rubies 干扰它。
于 2014-08-12T18:50:25.617 回答