是否有办法禁用before/after钩子在Capistrano3中?
例如,我想为我的(Rails)应用程序部署代码,但我不想在第一个部署时启动应用程序。(也许这并不是“理想”,但有很多原因我可能不想这样做。)
我知道以下几种选择:
deploy.rb文件的一部分运行的任务,例如,Rake::Task['deploy:compile_assets'].clear_actions。require中删除适当的Capfile语句,例如# require 'capistrano/rails/assets'。我想要的是能够调用特定的任务或将一些命令行标志传递给cap [stage] deploy。我想做的与deploy:setup大致相同,但该任务在Capistrano3中不可用。
做这件事最好的方法是什么?
发布于 2015-03-27 21:47:50
选项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:定义自定义任务
要对运行哪些任务进行更细粒度的控制,请定义一个自定义任务。
如果您使用cap [stage] deploy选项运行--trace,您将看到正在调用的所有任务的调试输出。检查输出并决定需要哪些任务,以及要跳过哪些任务。然后将您的选择组合成一个自定义任务。
例如,这应该部署您的代码并将其符号链接到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:setuphttps://stackoverflow.com/questions/29310113
复制相似问题