【问题标题】:Disable hooks for Capistrano3?禁用 Capistrano3 的挂钩?
【发布时间】:2015-03-27 20:59:29
【问题描述】:

有什么方法可以禁用 Capistrano3 中的一些 before/after 挂钩吗?

例如,我想为我的 (Rails) 应用程序部署代码,但我不想在第一次部署时启动应用程序。 (也许这不是“理想的”,但有很多原因我可能不想这样做。)

我知道以下选项:

  1. 禁用我不想在我的deploy.rb 文件中运行的任务,例如Rake::Task['deploy:compile_assets'].clear_actions
  2. 从我的Capfile 中删除相应的require 语句,例如# require 'capistrano/rails/assets'

我想要的是能够调用特定任务或将一些命令行标志传递给cap [stage] deploy。我想做的和deploy:setup差不多,但是Capistrano3没有这个任务。

最好的方法是什么?

【问题讨论】:

    标签: ruby-on-rails capistrano capistrano3


    【解决方案1】:

    选项 1:使用 ENV 开关禁用 require 语句

    正如您已经提到的,删除 require 语句是获得所需结果的最简单方法。为了能够在命令行上控制它,我会使用 ENV 选项,如下所示:

    # In Capfile
    # Include tasks from other gems included in your Gemfile
    unless ENV["CAP_DISABLE_PLUGINS"]
      require "capistrano/bundler"
      require "capistrano/rails"
      # etc.
    end
    

    然后运行:

    CAP_DISABLE_PLUGINS=1 cap production deploy
    

    选项 2:定义自定义任务

    要对运行的任务进行更细粒度的控制,请定义自定义任务。

    如果您使用--trace 选项运行cap [stage] deploy,您将看到正在调用的所有任务的调试输出。查看该输出并确定您需要哪些任务,以及要跳过哪些任务。然后将您的选择组合成一个自定义任务。

    例如,这应该部署您的代码并将其符号链接到current,但跳过运行bundler、编译资产或迁移数据库:

    # Place this in config/deploy.rb
    namespace :deploy do
      task :setup do
        invoke "deploy:check"
        invoke "deploy:new_release_path"
        invoke "git:create_release"
        invoke "deploy:set_current_revision"
        invoke "deploy:symlink:shared"
        invoke "deploy:symlink:release"
        invoke "deploy:log_revision"
      end
    end
    

    然后运行:

    cap production deploy:setup
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      相关资源
      最近更新 更多