【发布时间】:2009-10-08 21:48:58
【问题描述】:
我想在运行 deploy:migrate 任务之前停止一些进程。我知道我可以通过复制现有代码并在任务的开头和结尾添加停止/启动步骤来重新定义 deploy:migrate 任务。
我想知道是否有办法避免从我的任务版本中的默认部署:迁移任务中复制代码。有没有办法在定义同名的新任务时引用现有的 deploy:migrate 任务?
【问题讨论】:
标签: capistrano
我想在运行 deploy:migrate 任务之前停止一些进程。我知道我可以通过复制现有代码并在任务的开头和结尾添加停止/启动步骤来重新定义 deploy:migrate 任务。
我想知道是否有办法避免从我的任务版本中的默认部署:迁移任务中复制代码。有没有办法在定义同名的新任务时引用现有的 deploy:migrate 任务?
【问题讨论】:
标签: capistrano
与其重新定义deploy:migrate,不如为它定义一个before或after钩子。首先,创建一个新任务来完成您需要做的事情:
task :custom_name do
# whatever you need to do
end
然后通过执行以下操作之一将此新任务设置为在 deploy:migrate 任务之前或之后运行:
before "deploy:migrate", :custom_name
after "deploy:migrate", :custom_name
【讨论】:
出于我的要求,我覆盖了 deploy.rb 中的现有任务
namespace :deploy do
# to Override deploy:migrate task
task :precompile, :roles => :app, :except => { :no_release => true } do
run "your modified commands"
end
# to override deploy:assets:precompile task
namespace :assets do
task :precompile, :roles => :app, :except => { :no_release => true } do
run "your modified commands"
end
end
end
【讨论】: