2013-09-04 1 views
1

Я использую шеф-повар, чтобы настроить узел с Ubuntu 12.04. Я хотел использовать Ruby 1.9.3, в том числе для Chef, и я использую собственный загрузочный файл this, который я нашел для его выполнения. (Я ранее пытался использовать RVM совместно с шеф-поваром и обнаружил, что это вызывало проблемы на каждом шагу - я надеялся, что это будет менее подвержено ошибкам.)gem_package не работает в Ruby 1.9.3 - неопределенный метод 'full_name' для nil

Когда я запускаю шеф-клиент на этом узле, он достигает точка в попытке установить мое приложение 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 

T его тоже не удается, таким же образом.

Я обнаружил, что исполняемый файл gem, установленный apt-get, фактически был назван gem1.9.1. Я думал, что это может быть проблемой, и переименовал ее в gem. Как только это было сделано, я мог нормально запускать sudo gem install bundler и без проблем, но шеф-клиент все еще производит эту ошибку.

Что происходит, как я могу это исправить, и почему это сообщение об ошибке так ужасно?

+1

'' bundler "' не то же самое, что '' Bundler "'. Дело имеет значение! –

+0

@HolgerJust С одной стороны, теперь я чувствую себя идиотом. С другой стороны, моя проблема решена, и если вы хотите ответить на этот вопрос, я с радостью соглашусь с ней. – MrTheWalrus

+0

Не чувствуй себя так. Иногда все, что требуется, - это еще одна пара глаз, чтобы обнаружить очевидное :) –

ответ

1

С вашей трассировки стека, похоже, вы хотите установить драгоценный камень под названием . Однако этот камень не существует, что приводит к ошибке, которую вы наблюдаете. Вероятно, вы захотите установить жемчужину bundler. Дело, как правило, имеет значение в мире Ruby :)

Хотя верно, что сообщение об ошибке является довольно вводящим в заблуждение, причина этого, вероятно, в том, что случай несуществующего драгоценного камня явно не проверяется шеф-поваром, и поэтому предположения в более поздние этапы кода просто ломаются, что приводит к странной ошибке.

Это, в свою очередь, может считаться ошибкой шеф-повара, который вы можете сообщить об http://tickets.opscode.com/ (по крайней мере, если это проблема в самой последней версии шеф-повара, я этого не проверял).

+0

В общем, если ваш репозиторий gem не имеет драгоценного камня, который вы пытаетесь установить, эта ошибка будет отображаться. Мы используем частный репозиторий, поэтому мы столкнулись с этим загадочным сообщением. –