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 回答