2013-09-04 4 views
1

Chef를 사용하여 Ubuntu 12.04를 실행하는 노드를 설정하고 있습니다. 나는 Chef를 포함한 Ruby 1.9.3을 사용하고 싶었고, 이것을 달성하기 위해 찾은 this 커스텀 부트 스트랩 파일을 사용하고 있습니다. (이전에 Chef와 함께 RVM을 사용해 보았는데, 문제가 발생했을 때마다 오류가 발생하기 쉽습니다.)gem_package가 Ruby 1.9.3에서 실패 함 - 정의되지 않은 메소드 'full_name'for nil

이 노드에서 chef-client를 실행하면 도달합니다. 내 레일 응용 프로그램을 설치하기의 요점은, 따라서 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 그의 방식도 마찬가지로 실패합니다.

실제로 apt-get에서 실행 가능한 gem 실행 파일은 실제로 gem1.9.1으로 명명되었습니다. 이것이 문제 일 수 있다고 생각하여 gem으로 이름을 변경했습니다. 이 작업이 완료되면 sudo gem install bundler을 정상적으로 실행할 수 있지만 요리사 클라이언트는 여전히이 오류를 생성합니다.

어떻게 될까요, 어떻게 해결할 수 있습니까? 왜이 오류 메시지가 그렇게 끔찍한가요?

+1

''bundler ''는''Bundler''와 같지 않습니다. 케이스 문제! –

+0

@HolgerJust 한 손으로, 나는 바보처럼 느껴진다. 반면에, 제 문제는 해결되었습니다. 당신이 대답을하고 싶다면, 행복하게 받아 들일 것입니다. – MrTheWalrus

+0

그런 식으로 느끼지 마십시오. 때로는 필요한 것은 명백한 점을 찾기위한 눈의 또 다른 쌍일뿐입니다. –

답변

1

스택 추적에서 이라는 이름의 보석을 설치하려는 것 같습니다. 그러나이 보석은 존재하지 않으므로 관찰 한 오류가 발생합니다. 대신 bundler gem을 설치하고 싶을 것입니다. 대개 Ruby 세계에서 문제가 발생합니다.

오류 메시지가 오해의 소지가있는 것은 사실이지만, 그 이유는 존재하지 않는 보석의 경우는 Chef가 명시 적으로 검사하지 않았기 때문입니다. 코드의 나중 단계가 이상한 오류를 유발할 수 있습니다.

이것은 요리사의 버그로 간주되어 http://tickets.opscode.com/ (적어도 Chef의 최신 버전에서 여전히 문제가있는 경우 해당 사항을 확인하지 않은 경우)에보고하고자 할 수 있습니다.

+0

일반적으로 gem 저장소에 설치하려는 보석이 없다면이 오류가 표시됩니다. 우리는이 비밀스러운 메시지를 만날 수 있도록 개인 저장소를 사용하고 있습니다. –