我正在使用不同的rails應用進行應用。 我們正在快速推動代碼往往每個人......每個堆棧取決於其他(我們有內部的API)管理多個應用的最佳方式
我在這種情況下找不到任何具有最佳實踐的文章。
我是否應該將所有應用程序放在同一個git倉庫中,並且每個堆棧都是子模塊? 當我部署應該我總是部署所有的堆棧?
無論如何,這聽起來像是一個很常見的問題,但我找不到任何有關它的好文檔。
我正在使用不同的rails應用進行應用。 我們正在快速推動代碼往往每個人......每個堆棧取決於其他(我們有內部的API)管理多個應用的最佳方式
我在這種情況下找不到任何具有最佳實踐的文章。
我是否應該將所有應用程序放在同一個git倉庫中,並且每個堆棧都是子模塊? 當我部署應該我總是部署所有的堆棧?
無論如何,這聽起來像是一個很常見的問題,但我找不到任何有關它的好文檔。
你要使用git
到您的應用程序推送到服務器,多how Heroku
does it
我們在Rackspace公司對我們自己的堆棧實現了這一功能,因此我們不得不做一些重要的事情GTE它的工作。
部署
作爲一個經驗法則:
的應用程序的部署比的代碼更新不同。 雖然我不知道技術術語,但我知道如果 將代碼推送到單個應用程序,那麼將完全不同 以「部署」多個應用程序。
爲此,我建議將兩個進程分開處理。 IE只能將代碼推送到特定的存儲庫,並根據需要部署「應用程序」。
由於您沒有詳細說明堆棧的具體細節,請根據我們自己的RackSpace堆棧的工作,讓我給出我的解釋。
的Git
的你要找的是什麼git
骨幹 - 這將給你執行能力"single click deploy":
關鍵是要創造一個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
這顯然是非常基本的。您可以按照自己的喜好進行精心製作,如果您願意,甚至可以結合其他回購協議!
希望這給你一些想法!
你是關於那個的http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29 – IS04 2014-09-05 15:29:50
對不起,我感到困惑......我的意思是應用程序,只是編輯,使它更具可讀性 – Elie 2014-09-05 15:37:22
@Elie這些應用程序相互關聯還是不同? – Mandeep 2014-09-05 16:43:37