2014-01-29 14 views
1

我目前有一個遠程的EC2實例設置在我的本地git回購。推送工作。EC2 Rails Git問題:第一推動工作,但沒有更新現在

git push remote_name master 
Delta compression using up to 4 threads. 
Compressing objects: 100% (10/10), done. 
Writing objects: 100% (12/12), 896 bytes | 0 bytes/s, done. 
Total 12 (delta 6), reused 0 (delta 0) 
To [email protected]:eko_web.git 
4342c41..7bbc7db master -> master 

當我ssh到遠程EC2我能找到我做了複製我的應用程序VAR /應用/電流/但沒有進一步的更新最先推。當我看着我的裸Git回購時,我發現我最近推動當我做git show HEAD:<some_file>。當我手動編輯var/app/current中的視圖時,更改不會反映在我的網站中;我看到的是同樣的初始推動力。我有裸露的git倉庫的鉤建立在後收到以下內容:

#!bin/sh 
GIT_WORK_TREE=/var/app/current git checkout -f 

作爲一個全面的介紹,我用下面的教程,讓我到這地步。 http://myrailslearnings.wordpress.com/2013/02/19/getting-ec2-to-use-git-for-rails-app/http://www.lovholm.net/2013/06/26/push-your-code-onto-your-ec2-instance-with-git/

感謝您對此的任何想法!

編輯:

每波多黎各的建議下,我開始是沒有被初始化青苗一個新的實例。我現在有一個git倉庫(當手動更新時)反映服務器上的更改。但是我仍然無法遠程推送到該位置;它顯示了一個成功的推動,但然後文件在那裏,但沒有承諾。如果我手動提交它們,然後重新啓動服務器,則會更新網站。

+0

服務器上的git回購是否爲裸回購?裸回購不保存文件,只保存提交歷史記錄,因此不能用作工作樹。你應該在服務器上克隆克隆。看來你正在重新發明輪子。 Rails世界有一個用於部署代碼的標準:看看https://github.com/capistrano/capistrano – Arya

+0

是的,git回購是裸露的。但是var/app/current不是,它確實包含了我的應用程序的完整版本;只是從第一次推。有很多東西需要學習,我不想用AWS(以前只用Heroku)和部署工具atm來壓垮自己。如果我克隆到服務器,那麼我會設置GIT_WORK_TREE到那個位置?我不明白它實際上是如何更新網站本身的...爲什麼它第一次運作? – Morgan

回答

1

有很多方法可以進行部署。通過直接推送到非裸Git回購可以完成部署,但它並不常見。 (如http://www.lovholm.net/2013/06/26/push-your-code-onto-your-ec2-instance-with-git/所述)有些事情你必須注意。例如,如果該分支恰好被檢出,則不能推送到遠程存儲庫分支。

從它的外觀開始,您通過Elastic Beanstalk進行部署或者因爲/ var/app/current是部署Rails應用程序的默認位置(當您執行git aws.push時)請記住,在普通的Elastic Beanstalk部署/ var/app/current不包含git倉庫。它只是你的代碼的副本(git repo保存在其他地方,我相信在S3)

從git部署最常見的方式是讓你的git倉庫在github,bitbucket或git倉庫中。假設你使用github。在部署時,您將推送到github存儲庫,然後通過克隆或從github存儲庫拉入您的雲服務器來部署新代碼。 Capistrano是使這一過程自動化的工具之一。

另一種部署方式是將推送到您要部署的EC2服務器上的裸露git存儲庫,然後從該裸存儲庫將該克隆從同一服務器中拉出/克隆到另一個非裸存儲庫。

在你的情況下,如果你想在那裏看到代碼,你也可以嘗試將你的遠程倉庫切換到非裸倉庫。我猜想最簡單的方法是刪除裸倉庫,然後將原始文件作爲非裸倉庫克隆,並將其粘貼到要部署代碼的位置。

+0

感謝您的深入!我想我在這裏錯過了一個真正的基本概念;如果你能填補這個空白或者誤解它會很棒。 EC2存在。它基本上是雲中的一臺計算機。當我們談到通過從github下拉到雲服務器進行部署時,雲服務器是EC2實例?你提到的從裸露到非裸露的第二種可能的解決方案很有意義。在這一點上,我的困惑是EC2如何知道一個具體的回購是應該聯機和在哪裏配置的。 – Morgan

+0

要回答你的問題,是的。 EC2實例通過其git配置瞭解遠程git存儲庫。你可以用'git config -l'來看它。或者你可以看看'.git/config'的內容。如果您閱讀了從git推送和推送的基礎知識,這可能會有所幫助。 http://git-scm.com/book/en/Git-Basics-Working-with-Remotes。 – Rico

+0

我已經多次閱讀過該頁面;也許我不是很清楚地表達自己的困惑,或者我是誤解。如果我推動EC2上的github回購,EC2如何在我沒有告訴它時自動將它推到網上?我不必告訴EC2我的應用程序在哪裏存儲,存儲在特定位置,還是從該實例推送到另一個將推送它的遠程?遠程頁面是有道理的,但是本地repo - > ec2 repo - > web讓我在最後一步的實現方面感到困惑。 – Morgan

相關問題