首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用Capistrano3的钩子?

禁用Capistrano3的钩子?
EN

Stack Overflow用户
提问于 2015-03-27 20:59:29
回答 1查看 529关注 0票数 1

是否有办法禁用before/after钩子在Capistrano3中?

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

我知道以下几种选择:

  1. 禁用不希望作为deploy.rb文件的一部分运行的任务,例如,Rake::Task['deploy:compile_assets'].clear_actions
  2. 从我的require中删除适当的Capfile语句,例如# require 'capistrano/rails/assets'

我想要的是能够调用特定的任务或将一些命令行标志传递给cap [stage] deploy。我想做的与deploy:setup大致相同,但该任务在Capistrano3中不可用。

做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-27 21:47:50

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

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

代码语言:javascript
复制
# In Capfile
# Include tasks from other gems included in your Gemfile
unless ENV["CAP_DISABLE_PLUGINS"]
  require "capistrano/bundler"
  require "capistrano/rails"
  # etc.
end

然后跑:

代码语言:javascript
复制
CAP_DISABLE_PLUGINS=1 cap production deploy

选项2:定义自定义任务

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

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

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

代码语言:javascript
复制
# 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

那就跑吧:

代码语言:javascript
复制
cap production deploy:setup
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29310113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档