2014-03-28 56 views
2

我不想跑bundle install每次廚師客戶端我的應用程序運行在主機上我有一個bundle check執行資源,如果包檢查失敗廚師:基於`execute`結果失敗通知

execute "bundle_check" do 
    cwd node[:app][:install_dir] 
    user "foo" 
    command 'bundle check' 
    action :run 
    returns [1] 
    notifies :run, "execute[bundle_install]", :immediately 
    ignore_failure true 
end 
該通知 bundle install資源

我有ignore_failure true屬性集,但我想知道是否有一種方法來配置notifies屬性來根據返回值進行通知。本質上,我不希望bundle check的返回值被認爲是失敗,並且我只想通知該值是否爲1。

回答

3

您在考慮通知錯誤。你真的想在這種情況下,關於什麼是安裝資源Resource Guard

command 'bundle install' do 
    # ... existing parameters 
    not_if 'bundle check' 
end 

這將執行shell後衛,然後只有當bundle check失敗運行bundle install命令(返回非零值)。

+1

爲'execute'的文件明確地警告說,不要這樣。 http://docs.opscode.com/resource_execute.html
「當使用not_if和only_if守護執行資源時,當前工作目錄屬性(cwd)不會從資源繼承。」 – julianc

+0

這是關於PWD的警告(你沒有提到)。然後你需要'cd/path/to/gemfile && bundle check' – sethvargo

+0

你真的需要做cwd,否則如果你使用rbenv或rvm,可能會選擇錯誤的ruby,所以bundler gem將不可用並且shell命令將始終舉報虛假。此外,您需要密碼,因爲Gemfile位於那裏,所以還有一個錯誤來源。 – sekrett

1

execute[bundle install]衛隊與not_if

# install gem dependencies 
execute 'bundle install' do 
    command "bundle install --deployment --without development test" 
    cwd node[:app][:install_dir] 
    not_if 'bundle check', :cwd => node[:app][:install_dir] 
    # ... 
end 

注意, :cwd => node[:app][:install_dir]非常重要