8

私はシェフのドキュメントとGoogleを通じてこれに対する答えを見つけようとしてきましたが、何も思い付くことができませんでした。私は(まだ)ルビーの男ではないので、これに対する答えは、「シェフにとってちょうど十分なルビー」という問題に取り組むことから生じるかもしれません。これが私がやりたいことです:私のdeployリソースで、before_migrate属性で、私は私の現在のレシピでリソースを実行したいと思います。私が現在行っているのは、リソースをブロック自体に詰め込むことですが、それを行うためのより良い方法があるはずです。

before_migrate do

    template "#{app_root}/#{applet_name}/local_settings.py" do
        source "local_settings.py.erb"
        owner app_config['user']
        group app_config['group']
        variables(
            :database_name => app_config['postgresql']['database_name'],
            :user => app_config['postgresql']['user'],
            :password => app_config['postgresql']['password']
        )   
        action :create
    end 
end 

私が目指しているのは

before_migrate do
    "template #{app_root}/#{applet_name}/local_settings.py".execute
end

そのため、そのテンプレートコードを再利用できます。ありがとう!

4

2 に答える 2

2

「deploy」リソースの外部のリソースを何もしないアクションで指定してから、*before_migrate*で次のようにすることができます。

    before_migrate do

        ruby_block "notify_template" do
            block do
              true
            end
            action :create
            notifies :create, "template[#{app_root}/#{applet_name}/local_settings.py]", :immediately
        end

     end

そうすれば、必要なときに通知することができます。

于 2013-02-19T14:50:00.813 に答える
2

#chef IRCチャンネルの素晴らしい人たちのおかげで、私は自分の問題を解決しました。通知リソースには、を使用して直接アクセスする必要があります

Chef::Resource::Notification.new("template[#{app_root}/#{applet_name}/local_settings.py", :create)

アクションtemplateを実行するようにリソースに通知します。:create

于 2013-02-19T20:19:22.203 に答える