2012-12-10 19 views
5

Próbuję zainstalować opiekun szefa kuchni za pomocą lwrp chef_handler. Ten handler (e-mail do obsługi szefa kuchni) jest zapakowany w klejnot. Usiłuję zainstalować gem włącz obsługi z poziomu pojedynczego przepisu, który wygląda tak:Jak zainstalować zależności dla obsługi szefa kuchni?

chef_gem "chef-handler-mail" 

chef_handler "MailHandler" do 
    source 'chef/handler/mail' 
    arguments :to_address => "root" 
    action :nothing 
    supports :exception => true, :report => false 
end.run_action(:enable) 

Działa to dobrze, jeśli gem jest już zainstalowana. Jednakże, jeśli nie jest już zainstalowany Gem otrzymuję ten błąd:

[2012-12-09T20:47:56-05:00] FATAL: LoadError: chef_handler[MailHandler] (chef_handler::email line 13) had an error: LoadError: no such file to load -- chef/handler/mail.rb 

Wydaje się, że zasób chef_handler próbuje załadować obsługi przed chef_gem został wykonany i zainstalowany gem dla obsługi. Mogę oczywiście zrobić to w dwuetapowym ręcznym procesie, w którym mam oddzielny przepis na zainstalowanie klejnotu, a następnie przejdę do innej receptury, która konfiguruje program obsługi, ale mam nadzieję uniknąć wieloetapowych ręcznych procesów. Czy można to zrobić za pomocą pojedynczego przepisu?

Odpowiedz

2

mam podobny przepis na kuchni MiniTest-Chef-Handler:

chef_gem 'minitest' 
chef_gem 'minitest-chef-handler' 

require 'rubygems' 
require 'minitest-chef-handler' 

[... some unrelated code ...] 

chef_handler "MiniTest::Chef::Handler" do 
    source "minitest-chef-handler" 
    arguments :verbose => true 
    action :nothing 
end.run_action(:enable) 

Spróbuj wymagające swój skarb przed utworzeniem zasobu chef_handler lub mogą być źródłem powinny być inaczej ...

+0

To jest poprawna odpowiedź. – sethvargo

-1

#run_action wezwanie powoduje, że zasób chef_handler jest uruchamiany natychmiast w fazie "kompilacji", podczas gdy zasób chef_gem jest uruchamiany w fazie "wykonania" jak zwykle.

Tak więc klejnot musi być zainstalowany w fazie kompilacji. I wydaje się, że instrukcja require jest również potrzebna (jak zasugerowano w innej odpowiedzi) do szefa kuchni, aby załadować klejnot.

chef_gem 'chef-handler-mail' do 
    action :nothing 
end.run_action(:install) 

require 'chef/handler/mail' 

chef_handler 'MailHandler' do 
    source 'chef/handler/mail' 
    # ... other attributes 
    action :nothing 
end.run_action(:enable) 
+0

To nie jest prawda. Zasób 'chef_gem' zawsze wykonuje się w fazie kompilacji. – sethvargo

Powiązane problemy