簡體   English   中英

禁用Capistrano3的鈎子?

[英]Disable hooks for Capistrano3?

有什么方法可以在Capistrano3的鈎子before / after禁用某些功能?

例如,我想為我的(Rails)應用程序部署代碼,但是我不想在第一次部署時啟動該應用程序。 (也許這不是“理想的”,但是出於多種原因,我可能不想這樣做。)

我知道以下選項:

  1. 禁用我不想在deploy.rb文件中運行的任務,例如Rake::Task['deploy:compile_assets'].clear_actions
  2. 從我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM