【问题标题】:Capistrano v3 - Hook to run command post deployCapistrano v3 - 运行命令后部署的挂钩
【发布时间】:2014-12-18 12:37:35
【问题描述】:

我正在使用 Capistrano 部署到运行 Nginx 的服务器。我在使用 APC 时遇到了一些问题,我需要在 Capistrano 完成部署后重新加载 PHP-FPM。问题itself is outlined here 但就像那个作者一样,我不想通过 SSH 远程从命令行重新加载 PHP-FPM,我希望 Capistrano 将其作为部署后挂钩。

用到的deploy.rb的本质如下;

    set :application, "deploytest"

    set :repository,  "git@bitbucket.org:gitaccount/git-repo.git"
    set :scm,         :git
    set :deploy_via,  :remote_cache
    set :app_webroot, "/public"

    default_run_options[:pty] = true

    desc "Execute Capistrano tasks against Production server."
    task :prod do
        role :web, "123.45.67.89"
        role :app, "123.45.67.89"
        set :env,         "prod"
        set :domain,      "deploy-domain.com"
        set :deploy_to,   "/var/www/vhosts/#{domain}/site"
        set :branch,      "master"
    end

我可以使用命令推送;

    bundle exec cap prod deploy        

效果很好。男孩,我一直在努力让该命令在部署完成后自动触发另一个命令。

我尝试过的;

以下是主要方法的摘要;

  1. 为我的任务创建一个新的命名空间

    namespace :mcnab do
      desc "Running hook post deploy"
      task :fpmreload do
        execute "service php-fpm reload"
      end
    end
    
    after "deploy:create_symlink", "mcnab:fpmreload"
    
  2. 将这两个任务包装在“部署”命名空间中并使用以下命令触发挂钩

    after "deploy:create_symlink", "deploy:fpmreload"
    
  3. 在新任务中再次明确设置角色

    task :fpmreload do
        role :web, "178.62.13.10"
        role :app, "178.62.13.10"
        on roles(:all) do 
            execute "service php-fpm reload"
        end  
    end
    
  4. 明确设置用户

    task :fpmreload do
      on "user@123.45.67.89" do
        execute "service php-fpm reload"
      end
    end
    
  5. 使用“运行”而不是执行

    task :fpmreload do
      on "user@123.45.67.89" do
        run "service php-fpm reload"
      end
    end
    

Hrrmph,以及大约一百万种变化。我现在真的只是在猜测,即使有详细的错误报告,错误消息也无济于事。只有一个 deploy.rb 文件的工作示例,其中包含一个运行命令的简单部署后挂钩,但我找不到。

【问题讨论】:

    标签: deployment capistrano capistrano3


    【解决方案1】:

    这对我有用

    before :published, :fpm_reload
    desc 'Fpm reload'
    task :fpm_reload do
      on release_roles :all do |host|
        execute :service, 'php5-fpm', :reload
      end
    end
    

    文档: http://capistranorb.com/documentation/getting-started/flow/

    【讨论】:

    • 6 个月后的意外惊喜!先生,你好。我能澄清一下吗,我认为|host|是用双引号括起来的IP地址吗?
    • host 是 Capistrano::Configuration::Server 的一个实例,用于获取你可以做的 ip/host host.hostname rubydoc.info/github/capistrano/capistrano/Capistrano/…
    猜你喜欢
    • 1970-01-01
    • 2016-01-08
    • 2013-03-27
    • 2020-10-18
    • 2015-04-21
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多