0

我正在使用不同的rails應用進行應用。 我們正在快速推動代碼往往每個人......每個堆棧取決於其他(我們有內部的API)管理多個應用的​​最佳方式

我在這種情況下找不到任何具有最佳實踐的文章。

我是否應該將所有應用程序放在同一個git倉庫中,並且每個堆棧都是子模塊? 當我部署應該我總是部署所有的堆棧?

無論如何,這聽起來像是一個很常見的問題,但我找不到任何有關它的好文檔。

+0

你是關於那個的http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29 – IS04 2014-09-05 15:29:50

+0

對不起,我感到困惑......我的意思是應用程序,只是編輯,使它更具可讀性 – Elie 2014-09-05 15:37:22

+0

@Elie這些應用程序相互關聯還是不同? – Mandeep 2014-09-05 16:43:37

回答

0

你要使用git到您的應用程序推送到服務器,多how Heroku does it

我們在Rackspace公司對我們自己的堆棧實現了這一功能,因此我們不得不做一些重要的事情GTE它的工作。


部署

作爲一個經驗法則:

的應用程序的部署比的代碼更新不同。 雖然我不知道技術術語,但我知道如果 將代碼推送到單個應用程序,那麼將完全不同 以「部署」多個應用程序。

爲此,我建議將兩個進程分開處理。 IE只能將代碼推送到特定的存儲庫,並根據需要部署「應用程序」。

由於您沒有詳細說明堆棧的具體細節,請根據我們自己的RackSpace堆棧的工作,讓我給出我的解釋。


的Git

的你要找的是什麼git骨幹 - 這將給你執行能力"single click deploy"

enter image description here

關鍵是要創造一個bare存儲庫在你的服務器上(和Github & Heroku一樣),然後給你阿比利ty將您的代碼「推」到這些鉤子上。要做到這一點,你需要做幾件事情(即建立一個git回購,其路由您的服務器上,然後再創建任何post-receive hooks管理部署):

-

裸回購

的第一步是建立一個bare repo,它可以做得非常簡單

如果你SSH到您的EC2實例,只需運行以下命令:

$ git init --bare /git/your_app.git 

這會給你一個存儲庫,然後你可以「推」你的代碼。這和正在運行的存儲庫之間的區別在於,裸機不會有任何文件 - 只需參考&其他信息。訣竅是use a hook創建一個工作目錄,然後您可以使用它來運行您的應用程序。

裸回購將允許您推送您需要的代碼,並且基本上爲您提供Github其他人擁有的功能 - 將代碼簡潔地發送到服務器的功能。

-

主機

其次,你這時就需要能夠「路線」的任何請求這個混帳回購協議,並推測,其他的git回購你有太多。爲此,您需要使用您的網絡服務器捕獲任何請求。下面是如何使用Nginx的做到這一點:

#/etc/nginx/sites-available/git 
server { 
     listen 80; 
     server_name your_domain.com; 
     root /git; 

     auth_basic "RESTRICTED ACCESS"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 

     location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive$ 
       root /gitk; 

       client_max_body_size     100M; 

       fastcgi_param SCRIPT_FILENAME   /usr/lib/git-core/git-http-backend 
       fastcgi_param REMOTE_USER    $remote_user; 
       fastcgi_param GIT_HTTP_EXPORT_ALL  ""; 
       fastcgi_param GIT_PROJECT_ROOT   /git; 
       fastcgi_param PATH_INFO     $uri; 
       fastcgi_pass       unix:/var/run/fcgiwrap.socket 
       include fastcgi_params; 
     } 
} 

你要use htpasswd to create an authentication file(未針對此創建的授權還),然後應該讓你在本地處理如下:

> git remote add production http://your_domain.com/your_repo.git 
> git add . 
> git commit -a -m "Production" 
> git push production master 

這會要求您進行身份驗證,您必須使用您在auth文件中提供的詳細信息。

-

掛鉤

最後,你會那麼可以使用很多git hooks打造的 「部署」 機制。通常,你會使用post-receive

#git/your_app.git/hooks 
cd /app/your_app 
git --work-tree=${APP_PATH} --git-dir=${GIT_DIR} checkout -f 
bundle install 
touch tmp/restart.txt 

這顯然是非常基本的。您可以按照自己的喜好進行精心製作,如果您願意,甚至可以結合其他回購協議!

希望這給你一些想法!

相關問題