我正在使用Chef来设置运行Ubuntu 12.04的节点。我想使用Ruby 1.9.3,包括Chef,我正在使用我发现的this自定义引导文件来完成它。 (我之前尝试过将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
这也以同样的方式失败了。
我发现apt-get安装的gem
可执行文件实际上名为gem1.9.1
。我认为这可能是问题所在,并将其重命名为gem
。一旦完成,我可以正常运行sudo gem install bundler
而没有任何问题,但是厨师 - 客户仍然会产生此错误。
发生了什么,我该如何修复它?为什么这条错误信息如此糟糕?
答案 0 :(得分:1)
从堆栈跟踪中,您似乎想要安装名为Bundler
的gem。但是,此gem不存在会导致您观察到的错误。您可能希望安装bundler
gem。案例通常在Ruby世界中很重要:)
虽然错误消息确实具有误导性,但其原因可能是Chef未明确检查不存在的gem的情况,因此在代码的后续阶段中的假设只会中断导致奇怪的错误。
这反过来可能被认为是您可能想要在http://tickets.opscode.com/上报告的Chef中的错误(至少如果在最新版本的Chef中仍然存在问题,我还没有检查过)。