2016-04-12 101 views
1

我一直在遷移我們的rails應用程序的capistrano部署方面遇到了一些麻煩,以便讓多個用戶可以部署。最初,我們在用戶所擁有的/ tmp下爲我們的獨角獸服務器提供了一個套接字,該用戶將進行部署。這不適用於多個用戶,因爲他們沒有修改文件的權限。爲多用戶Capistrano部署設置Unicorn

我們嘗試了第二種方法,將套接字文件放在應用程序的tmp目錄下。每次部署後,我們將套接字文件的所有權重置爲用戶之間共享的部署者組。這可以用於用戶的第一次部署,但如果同一用戶連續進行第二次部署,則不會。如果不同的用戶部署,它可以正常工作。

基本上我們最終得到了一個部署系統,在這個系統中,每個人只需要一次部署一次,然後再請求另一個人部署一次。 看起來就像第二次又進一步部署時,獨角獸進程沒有正確重啓。在第一個部署麒麟日誌中成功部署顯示了這一點:

INFO -- : Refreshing Gem list 
INFO -- : listening on addr=/var/www/dashboard/current/tmp/dashboard.socket fd=11 
INFO -- : worker=0 ready 
INFO -- : worker=1 ready 
INFO -- : worker=2 ready 
INFO -- : master process ready 
INFO -- : worker=3 ready 

在第二次部署失敗的記錄是這樣的:

INFO -- : executing ["/var/www/dashboard/shared/bundle/ruby/2.1.0/bin/unicorn", "-c", "/var/www/dashboard/current/config/unicorn/production.rb", "-E  ", "deployment", "-D", {11=>#<Kgio::UNIXServer:/var/www/dashboard/current/tmp/dashboard.socket>}] (in /var/www/dashboard/releases/20160405234438) 
INFO -- : forked child re-executing... 
INFO -- : inherited addr=/var/www/dashboard/current/tmp/dashboard.socket fd=11 
INFO -- : Refreshing Gem list 
INFO -- : reaped #<Process::Status: pid 22939 exit 0> worker=0 
INFO -- : reaped #<Process::Status: pid 22942 exit 0> worker=1 
INFO -- : reaped #<Process::Status: pid 22945 exit 0> worker=2 
INFO -- : reaped #<Process::Status: pid 22948 exit 0> worker=3 
INFO -- : master complete 
INFO -- : worker=0 ready 
INFO -- : worker=1 ready 
INFO -- : worker=2 ready 
INFO -- : master process ready 
INFO -- : worker=3 ready 

我們正在使用我們的麒麟部署創業板Capistrano酒店-獨角獸。我們使用的是ruby 2.1.5,capistrano 2.15.7和獨角獸5.0.1。

回答

1

您應該在獨立用戶下運行獨角獸,與個人開發人員無關,如www。然後,獨角獸插座可以在別處,例如,在/tmp。使用unicorn_user選項(請參閱gem readme)使Capistrano在給定用戶下重新加載或重新啓動獨角獸服務器。

您還需要爲您的開發人員組設置sudo規則,以便他們可以在不提供密碼的情況下以www用戶的身份運行命令。加入這樣的事情/etc/sudoers文件:

%developers ALL=(www) NOPASSWD: ALL 

警告:這允許任何用戶developers組中的用戶www不給密碼運行任何命令!更清潔和更安全的方法是隻允許啓動獨角獸的命令並向其發送用於重新加載/停止的信號等。