在Vagrant中“找不到RubyGem puppet”

时间:2012-08-21 09:40:06

标签: ruby-on-rails rubygems puppet vagrant

我可以手动运行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,我该如何摆脱这个错误?

3 个答案:

答案 0 :(得分:3)

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

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

我想知道Vagrant上的RVM是否值得麻烦。关于创建Vagrant框的重点是为单个项目创建一个隔离的环境,那么为什么我需要多个Rubies / Gemsets呢?

答案 1 :(得分:2)

Puppet由VM上的VM运行。确保仍为用户vagrant和root安装gem。 它也可能是你的默认ruby版本的转换(系统vs通过rvm或rbenv安装?)。

希望这有帮助。

答案 2 :(得分:0)

Puppet预计将由系统ruby的vagrant运行,但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

由于流浪傀儡提供者(https://github.com/mitchellh/vagrant/blob/master/plugins/provisioners/puppet/provisioner/puppet.rb#L154)中的一个逃避错误/功能,这导致流浪者

  1. 从加载的rvm开始,并使用默认的
  2. 进行配置
  3. 转到指定目录
  4. 切换到系统红宝石,再次找到宝石
  5. 在第一次运行时运行puppet,没有任何RVM-rubies干扰它。