[英]Disable hooks for Capistrano3?
有什么方法可以在Capistrano3的鈎子before
/ after
禁用某些功能?
例如,我想為我的(Rails)應用程序部署代碼,但是我不想在第一次部署時啟動該應用程序。 (也許這不是“理想的”,但是出於多種原因,我可能不想這樣做。)
我知道以下選項:
deploy.rb
文件中運行的任務,例如Rake::Task['deploy:compile_assets'].clear_actions
。 Capfile
刪除適當的require
語句,例如, # require 'capistrano/rails/assets'
Capfile
# require 'capistrano/rails/assets'
。 我想要的是能夠調用特定任務或傳遞一些命令行標志來cap [stage] deploy
。 我要執行的操作與deploy:setup
大致相同,但是Capistrano3中沒有該任務。
做這個的最好方式是什么?
選項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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.