Basit bir jekyll tabanlı blogu dağıtmak için bir yemek kitabı geliştiriyorum. 'Uygulama' yemek kitabını temel olarak kullanıyorum. Şef, tanımlanmış geri aramalarımı görmezden gelerek her şey sorunsuz çalışır.Uygulama yemek kitabını kullanarak before_symlink geri arama nasıl tanımlanır?
Şef günlüğünde geri arama ile ilgili girdiler var, ancak hiçbir hata veya geri arama yürütme sonucu göremiyorum. ,
[2012-10-06T10:06:20-04:00] INFO: Processing ruby_block[example_com before_deploy] action create (/var/cache/chef/cookbooks/application/providers/default.rb line 107)
[2012-10-06T10:06:20-04:00] DEBUG: Got callback before_deploy: #<Proc:[email protected]/var/cache/chef/cookbooks/example_com/recipes/default.rb:24>
[2012-10-06T10:06:20-04:00] INFO: application[example_com] running callback before_deploy
[2012-10-06T10:06:20-04:00] INFO: ruby_block[example_com before_deploy] called
[2012-10-06T10:06:20-04:00] INFO: Processing deploy_revision[example_com] action deploy (/var/cache/chef/cookbooks/application/providers/default.rb line 122)
Ben de geri arama dizesi kullanarak tanımlamaya çalıştı:
İşteinclude_recipe "git"
application "example_com" do
path "/var/www/example.com"
repository "[email protected]:xxx/xxx.git"
revision "master"
deploy_key <<EOF
-----BEGIN RSA PRIVATE KEY-----
..skip...
-----END RSA PRIVATE KEY-----
EOF
# before_symlink "script/bootstrap"
before_deploy do
# raise
# Chef::Log.info("INSANE!")
execute "bundle exec rake generate" do
cwd release_path
end
end
end
şef-istemci callback'inde before_deploy yürütür diyor günlüğü: İşte
tarifleri/default.rb dosyasıdır ama sonuç aynı. Şef, geri arama tanımı olan bir dosya olmadığı zaman hata gösterir ve doğru yerde ise dosyayı yok sayar.
Güncelleme 1
Chef kaynaklardan içindeki derin kazma sonra geri aramaları ayrı şef koşucu yürütülen ve bu anında değil olur ki fark etti. Uygulamada yemek kodu, geri arama gövdesini değerlendirmek için _recipe_eval_ çağrılarını çağırdığında, Şef ayrı bir koşucu oluşturur ve kod, yöntemini arayana kadar yürütülmez.
Bu yüzden, uygulama yemek kitabını biraz değiştirdim. _recipe_eval_ 'den hemen sonra converge numaralı çağrıyı ekledim ve her şey çalışmaya başladı.
Bence bu bir hatadır ve resmi Opscode izleyicisinde bir sorun oluşturacağım. Ancak, herhangi bir yorum çok hoş geldiniz! İşte
application/kütüphaneler/default.rb sürümünü modifed edilir:class Chef
class Provider
module ApplicationBase
# ...skip...
def callback(what, callback_code=nil)
Chef::Log.debug("Got callback #{what}: #{callback_code.inspect}")
@collection = Chef::ResourceCollection.new
case callback_code
when Proc
Chef::Log.info "#{@new_resource} running callback #{what}"
# recipe_eval(&callback_code)
recipe_eval(&callback_code)
converge # <--- Remove this line and no callbacks will work.
when String
callback_file = "#{release_path}/#{callback_code}"
unless ::File.exist?(callback_file)
raise RuntimeError, "Can't find your callback file #{callback_file}"
end
run_callback_from_file(callback_file)
when nil
nil
else
raise RuntimeError, "You gave me a callback I don't know what to do with: #{callback_code.inspect}"
end
end
end
end
end