2

特に障害が発生した場合、before_symlink がいつどのように実行されるかを理解しようとしています。このブロックを見てください:

deploy_revision "foo" do
  action :deploy
  deploy_to "/opt/foo"
  ...
  symlink_before_migrate(app_symlinks.merge({
  ...     }))
  purge_before_symlink([])
  create_dirs_before_symlink([])
  symlinks({})
  before_symlink do
    current_release = release_path

    bash "foo_buildout_install" do
      user "foo"
      cwd current_release
      code <<-EOH
         ...
      EOH
    end
  end
  restart_command do
    current_release = release_path
    bash "foo_foreman_install_and_restart" do
        restart foo || start foo
      EOH
    end
  end
end

before_symlink ブロックはどのような条件下で実行されますか? たとえば、ビルドが失敗した場合、chef は再プロビジョニングされます - 再度実行されますか? シンボリックリンクが作成された場合、再度呼び出されることはありますか?

(私はまだ Chef を学んでおり、Ruby 開発は行っていません。そのため、deploy_revision の仕組みや Rails デプロイ モデルについて何も理解していると思い込まないでください。)

4

1 に答える 1

1

「デプロイ」するたびに実行されると思います。これは、Chef を介してプロビジョニングするたびに実行されると思います。

自分でさらに調査したい場合は、Ruby gems パスで Chef のインストールを見つけ、内部を調べてください。./lib/chef/provider/deploy.rb

deploy メソッドは、それ自体をほとんど説明しています。

  def deploy
    enforce_ownership
    verify_directories_exist
    update_cached_repo
    copy_cached_repo
    install_gems
    enforce_ownership
    callback(:before_migrate, @new_resource.before_migrate)
    migrate
    callback(:before_symlink, @new_resource.before_symlink)
    symlink
    callback(:before_restart, @new_resource.before_restart)
    restart
    callback(:after_restart, @new_resource.after_restart)
    cleanup!
    Chef::Log.info "#{@new_resource} deployed to #{@new_resource.deploy_to}"
  end
于 2012-08-21T15:16:51.647 に答える