我可以手动运行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,我该如何摆脱这个错误?
答案 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)中的一个逃避错误/功能,这导致流浪者