2010-08-30 44 views
6

我們希望開始讓我們的用戶幫助我們在更廣泛的版本之前測試我們的功能更改。我們的Rails應用程序已經有了角色,但我不知道如何在不移動整個應用程序的情況下執行測試功能。如何提供測試功能以選擇用戶? (導軌)

我想不出解決方案來的一些問題:

  • 測試版功能可能需要數據庫遷移。當它可能導致現有應用程序出現問題時,你如何處理這個問題?
  • 更改模板和css/sass也可能會改變現有功能。
  • 更改底層模型代碼可能會破壞依賴它的現有控制器/接口。

一個解決方案(一個糟糕的選擇)是在新功能中編寫代碼並將其封裝在只顯示/使用它的邏輯中,如果用戶具有「測試」角色。問題在於,當你最終把它活下來時,你可能會有很多解開/改變。這既浪費時間,也可能引入錯誤。

另一種解決方案是運行應用程序關閉一個子域名和路由用戶公測作用,它的一個單獨的「測試版」的分支。問題在於,ssl證書,電子郵件鏈接和其他依賴於域的問題的複雜性使得這有點維護痛苦(儘管不如第一種解決方案那麼糟糕)。

我怎樣才能提供這種最有效,以減少額外的工作來維持,然後公測切換到完整版?

回答

0

一種可能性考慮:讓破壞性的(即單向的,不可逆的)改變你的模型可能超出抑制你提供這個測試功能的能力的原因是有問題的。例如,如果您在遷移期間遇到問題,則可能難以從更改中退出。

相反,我會建議尋找方法來只添加到模型:添加同時留下列老在原地向後兼容性列,如果你使用它們,等版本存儲過程如果需要更改列數據類型,請改爲創建目標數據類型的新列,然後讓您的遷移也將新列中的現有行數據從舊列複製到新列。然後,您可以在測試環境中執行數據庫遷移,並確認應用程序的舊版本和新版本都可以繼續使用數據庫更改。服務於您的應用程序的多個版本

一個可能的方法是使用一個替代的respond_to格式進行Beta版的網站。您可以在您的ApplicationController中創建一個方法來檢查用戶是否處於測試階段。如果爲true,則可以覆蓋request.format值,並且在respond_to塊中有一個「format.beta」類型的響應。

這種方法的挑戰是控制器邏輯。如果不在控制器方法中嵌入某種開關邏輯,您將無法更改控制器代碼路徑。這可能不是主要問題,具體取決於您有多少控制器更改。

(順便說一下,看起來我們有非常相似的名字!:-))

0

我能想到的是一樣的東西在你的用戶表中的列USER_TYPE。以便您可以將它們標記爲測試版用戶。 (即使你可以使用這個標誌爲默認,這樣你不需要改變現有的代碼,所有誰創建的新用戶將測試用戶。)

對於這個我假設

你給所有功能給您的測試版用戶 Beta用戶將具有相同的功能,這將在未來由普通用戶使用。

**唯一的好處是,你可以過濾測試用戶,當他們被登錄。當你可以這樣做,允許登錄與否等。

當你切換到完整版本只需更新測試版用戶作爲普通用戶

我不知道這是怎麼適用於您的方案。

感謝

sameera

+0

感謝samerra,我這樣做類似。用戶可以有多個角色(管理員,基本,高級等),其中之一將是「測試版」。我遇到的問題是,部署測試版功能有時需要數據遷移和其他重大檢修。不幸的是,這可能會導致應用程序的非beta版原始版本不兼容(例如,如果從數據庫中刪除某個字段)。我主要是問人們如何處理這個問題。 – chrishomer 2010-08-30 18:55:27

0

我個人不認爲這是一個壞主意與具有公測角色的用戶檢查包裝代碼。搜索所有呼叫將很容易,例如if current_user.authorized?(:beta),並將其全部刪除。

+0

這很公平。我並不完全反對這個選擇。只是想知道人們是否做了其他事情。 – chrishomer 2010-09-03 04:46:46

1

我覺得這幾樣測試的唯一合理的工作機會,而不會影響當前的應用程序將使用一個「升級」環境,實際上只是重定向測試版用戶到該環境。

相比與域名有關的功能的問題實在是沒有什麼比遷移/功能性問題。

在我們公司,我們做的正是這一點,但我們沒有測試用戶的事情,但是沒有分離的環境將是非常不能存活,保持新功能,從目前的功能搞亂。

爲特色,只是用不同的分支,爲這些新的功能,並從該分支創建「分期」的環境中,一旦特徵已經過測試,你只需將它們合併到HEAD和新功能有:]

+0

使用分段環境存在數據問題。已經使用該服務的用戶將無法訪問其舊數據,您將如何解決此問題? – David 2010-09-01 06:31:08

+0

登臺環境的重點在於,您可以隨時隨地做任何事情,包括數據庫。我們在開始測試之前同步我們的生產和臨時數據庫。我們選擇將所有數據從暫存中提取出來不相關,但是您可以輕鬆地將這些數據標記爲測試版,並且在測試完成後將數據從分段數據移植到生產中,因此測試版用戶不會浪費所有時間進行測試,也不會節省任何數據。但那是由你/你的公司決定的。 – Draiken 2010-09-01 13:50:04

+0

我們有一個臨時環境,但我們並沒有要求用戶爲我們做測試。我們希望他們成爲第一批接觸新UI或功能的人,並向我們提供反饋。 – chrishomer 2010-09-03 04:42:56

0

我想要做的一件事是建立一個實際上是生產環境的測試「分級」環境。這個想法應該是讓beta.mydomain.com然後發送那些希望儘早獲得功能的用戶。基本上,它只是一個部署到現場測試版網站的分支。