2009-02-19 105 views
17

我想爲Rails應用程序設置暫存服務器。我使用git & github,Cap,並且有一個帶有Apache/Passenger的VPS。至於暫存服務器的配置以及與它進行交互的過程,我對於暫存設置的最佳實踐感到好奇。我知道它應該與生產服務器儘可能相同,但限制公衆訪問它將限制它,所以只有爲我的使用提供保護的提示也會很好。Web應用暫存服務器的最佳實踐(預算中)

另一個具體問題是我是否可以在VPS上創建一個虛擬主機,以便暫存服務器可以與生產服務器一起駐留。不過,我有一種感覺,可能有理由避免這種情況。

回答

15

便宜和簡單的答案:

1)點staging.domainname.com在您的VPS。

2)添加虛擬主機進行分段,指向應用程序的臨時副本。

3)添加登臺環境設置。 (你知道你可以在Rails中定義新的 環境嗎?有趣的東西!)我認爲這很簡單,只需將production.rb複製到staging.rb並根據需要調整,再加上更新database.yml即可。

4)在ActionController的,在代碼中添加類似以下

if (ENV["RAILS_ENV"] == "staging") 
    before_filter :verifies_admin 
    end 

哪裏verifies_admin可以是你想要的任何東西。我建議使用HTTP基本認證 - 便宜和容易。

def verifies_admin 
    authenticate_or_request_with_http_basic do |username, password| 
    username == "foo" && password == "bar" 
    end 
end 

注意,這可能博克,如果他們正在入站請求你,雖然這是很簡單的解決您的連接到支付網站(只關閉的before_filter爲適當的控制器和/或行動。)

更好的答案:

1)購買來自同一圖像設置爲你的常規VPS第二VPS,和/或同一安裝-來自該裸機腳本(我配置像Capistrano &爲此折舊)。

2)將staging.domainname.com指向它。

3)否則它與其他選項相同。

事情要考慮:

1)如果我有一個臨時數據庫呢?可能,尤其是如果你要測試模式更改。

2)我是否應該有一些設備來在分段和生產系統之間移動數據?

3)我的臨時應用程序發生災難性故障會導致主應用程序失效嗎?最好的希望答案是否定的。

3

我想這取決於如果登臺服務器需要任何人都可以訪問,但你。如果其他人需要能夠訪問它,那麼你需要在另一個小的分區,然後你可以使用htaccess或防火牆規則來限制誰可以訪問它。如果沒有其他人需要訪問它,我會建議使用VMWare。你可以在你自己的機器上運行它,或者你周圍的備用盒子,或者一臺非常便宜的電腦。我們使用免費的VMWare服務器2作爲我們的登臺和部署測試服務器,並且效果很好。它還使得通過複製基本VM設置來創建新的測試服務器變得非常簡單。如果你在Mac上,你可以使用VMWare Fusion,但是我必須使用它來測試IE。

+0

非常感謝 - 我澄清了誰會需要它。這只是我,但它也需要與第三方支付網站進行溝通。 – fig 2009-02-19 15:09:08

+0

這應該可以正常工作。您可以配置VMWare機器以訪問互聯網。 – scottd 2009-02-19 15:24:23

1

使用兩個獨立的服務器(VPS或其他),您可以在基礎映像上使用它們(硬件和軟件)。自動化所有您的生產環境的配置,所以沒有什麼是手工完成的。使用該自動化生成與生產環境相同的登臺服務器。保持自動化以確保兩個環境保持同步並可按需複製。

解決了您的暫存不同步問題和您的一階縮放問題。

就成本而言,VPS作爲芯片便宜。通過使用臨時服務器可以避免的生產停機時間導致的故障數量將立即支付您的臨時環境(除非您實際上沒有賺錢,在這種情況下,停機時間並不是很多問題,你可以堅持破損)。

3

我可能會因爲這樣說而被槍殺,但對於預算緊張的小型網站,我發現沒有什麼問題可以在生產環境中運行臨時網站。

您正在使用Rails,Apache和Passenger。設置不同的Rails配置(和數據庫),並將每個配置設置爲一個名爲VirtualHost。用htaccess保護一個。從你的域創建一個A記錄(staging。*)並指向它。

當然,它們並不完全相互絕緣。你可能會崩潰一切。哎呀!這可能無關緊要。 :)

4

我想補充一點,創建Capistrano的Jamis Buck也創建了一個專門爲Capistrano設置多級環境的gem。你可以做到沒有寶石,但寶石使它更容易。你可以找到他的崗位上與這裏說明:http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

還有在Pragmatic Programmer一書「高級Rails的食譜」是指導您如何正確地設置此一個非常有用的文章。我發現這篇文章的答案與Rails食譜書相結合使得這個設置非常容易。

StackOverflow不會讓我添加另一個鏈接,但如果你是谷歌高級Rails食譜,這本書是第一個結果。