我正在使用 Chef 设置运行 Ubuntu 12.04 的节点。我想使用 Ruby 1.9.3,包括 Chef,我正在使用我发现的这个自定义引导文件来完成它。(我之前曾尝试将 RVM 与 Chef 结合使用,但发现它每时每刻都会出现问题——我希望这不会那么容易出错。)
当我在这个节点上运行 chef-client 时,它会尝试安装我的 Rails 应用程序,尝试安装 Bundler,但失败了,因此:
Recipe: <Dynamically Defined Resource>
* gem_package[Bundler] action install
================================================================================
Error executing action `install` on resource 'gem_package[Bundler]'
================================================================================
NoMethodError
-------------
undefined method `full_name' for nil:NilClass
Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/application_ruby/providers/rails.rb
162: gem_package gem do
163: action :install
164: source src if src
165: version ver if ver && ver.length > 0
166: end
167: end
Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/application_ruby/providers/rails.rb:162:in `block in install_gems'
gem_package("Bundler") do
provider Chef::Provider::Package::Rubygems
action [:install]
retries 0
retry_delay 2
package_name "Bundler"
version ">1.3"
cookbook_name "tiptap_api"
end
为了尝试隔离问题,我gem_package
在部署尝试之前在配方中放置了以下调用:
gem_package 'Bundler' do
version '>0'
action :install
end
同样,这也失败了。
我发现gem
apt-get 安装的可执行文件实际上名为gem1.9.1
. 我认为这可能是问题所在,并将其重命名为gem
. 完成后,我可以sudo gem install bundler
正常运行并且没有任何问题,但是厨师客户端仍然会产生此错误。
发生了什么事,我该如何解决它,为什么这个错误信息如此可怕?