2012-03-29 92 views
4

我做了一个安装phpunit的vagrant的配方,但是当我使用vagrant暂停然后流浪时,它仍然失败。如何阻止厨师食谱完成时运行

execute "discover phpunit" do 
    command "pear channel-discover pear.phpunit.de" 
    action :run 
end 

execute "config phpunit" do 
    command "pear config-set auto_discover 1" 
    action :run 
end 

execute "install phpunit" do 
    command "pear install pear.phpunit.de/PHPUnit" 
    action :run 
end 

我得到:

[default] [Thu, 29 Mar 2012 14:39:57 -0700] ERROR: execute[discover phpunit] (phpunit::default line 39) has had an error 
[Thu, 29 Mar 2012 14:39:57 -0700] ERROR: execute[discover phpunit] (/tmp/vagrant-chef-1/chef-solo-1/phpunit/recipes/default.rb:39:in `from_file') had an error: 
execute[discover phpunit] (phpunit::default line 39) had an error: Chef::Exceptions::ShellCommandFailed: Expected process to exit with [0], but received '1' 
---- Begin output of pear channel-discover pear.phpunit.de ---- 
STDOUT: Channel "pear.phpunit.de" is already initialized 
+0

您使用的是哪一版本的vagrant? – 2012-03-29 21:45:26

+0

@MichaelIrey版本0.8.7 – NathanBrakk 2012-03-29 21:46:44

回答

4

它看起来像正在发生的事情是该脚本正在运行的每个执行vagrant up时间。

你可能想是这样的:

execute "discover phpunit" do 
    command "pear channel-discover pear.phpunit.de" 
    action :run 
    not_if "which phpunit" 
end 

只要确保phpunit是你$PATH

+0

的确如此。好的!这里有另一个问题:如果它有phpunit,我怎么才能让它退出配方? – NathanBrakk 2012-03-29 21:55:48

+0

@NathanBrakk真的没有办法(我知道)“退出”一个配方,因为它基本上是一个程序脚本 – Andrew 2012-04-09 16:48:43

+1

换句话说:这取决于你如何使你的食谱幂等。 – manojlds 2012-04-19 10:37:56

0

我想大概是not_if设置为

not_if { File.exists?('/path/to/phpunit') 

而不是依赖于它在$ PATH中找到。