2015-05-15 27 views
0

我最近升級到Capistrano 2.x到3.x,過程相當簡單。但是,我所遇到的問題是Capistrano 2.x中曾經存在的命令行功能的丟失。特別是,如果我想通過一個不同的用戶比用戶我的系統的當前登錄到部署到遠程服務器,我可以運行如下命令:如何通過Capistrano 3在服務器上使用不同的用戶名從命令行部署代碼?

cap -s user=remote_user staging deploy 

Capistrano的3.X允許一個設置在一個特定的用戶通過像這樣的配置設置來部署腳本本身;注意user:選項:

server 'example.com', user: 'remote_user', roles: %w{app db web}, my_property: :my_value 

這是非常好的!但是我在多個用戶(不僅僅是通用的deploy用戶)可以部署由服務器上的組權限管理的代碼的設置上進行系統管理。意思是用戶,linus,snoopylucy和所有工作在相同的代碼,然後部署在自己的唯一用戶名和一切工作。不,切換此設置以使用通用deploy現在不是一個簡單的選項,至少可以說。代碼庫是相當直接的PHP代碼 - 從部署的角度來看 - Capistrano有助於簡化部署工作流程。

我不想回滾到Capistrano 2.x.那麼,如何讓這些用戶和Capistrano腳本與Capistrano 3.x設置保持一致,但是仍然允許每個人通過他們自己的個人用戶帳戶獨立部署代碼?

+0

有許多討論和帖子在線解釋Capistrano 3.x如何使用環境變量而不是Capistrano 2.x中使用的'-s'設置,但很少清楚地解釋如何實際執行環境變量設置,如這是爲了處理使用相同Capistrano腳本的多個用戶。因此,這個自我發佈的問題和答案線程。 – JakeGould

回答

0

所以我怎能這些用戶和Capistrano的腳本與 Capistrano的3.X線的設置,但仍允許用戶通過自己的個人用戶帳戶獨立部署 代碼?

雖然不是那樣乾淨使用-s user=remote_user的Capistrano的2.x的方法,設置自定義用戶名類似的目標可以通過Capistrano的3.x的使用環境變量來實現這已經過測試,並且在Capistrano 3.4.0中運行良好。

要做的第一件事就是調整它們的服務器設置以允許環境變量。所以server線,上面寫着這樣的上面:

server 'example.com', user: 'remote_user', roles: %w{app db web}, my_property: :my_value 

現在被改爲添加ENV["CAP_USER"]變量是這樣的:

server 'example.com', user: ENV["CAP_USER"] || 'remote_user', roles: %w{app db web}, my_property: :my_value 

的邏輯基本上可以歸結爲:如果ENV["CAP_USER"]設置,使用。如果沒有,只需使用remote_user

而現在利用的是在命令行中,一個只想部署這樣的:

export CAP_USER=remote_user && cap staging deploy 

注意export CAP_USER=remote_user是什麼套名爲CAP_USER環境變量然後把它在Capistrano的爲ENV["CAP_USER"]訪問3.x腳本。 &&只是一個Bash命令,用於將該命令連接到下一個cap staging deploy

如果一個人想,一個可能只是調整自己~/.bash_profile永久設置CAP_USERremote_user所以基本cap staging deploy可以原樣使用,而不必記住一個複合命令的語法。

相關問題