如何提供测试功能以选择用户? (导轨)

问题描述:

我们希望开始让我们的用户帮助我们在更广泛的版本之前测试我们的功能更改。我们的Rails应用程序已经有了角色,但我不知道如何在不移动整个应用程序的情况下执行测试功能。如何提供测试功能以选择用户? (导轨)

我想不出解决方案来的一些问题:

  • 测试版功能可能需要数据库迁移。当它可能导致现有应用程序出现问题时,你如何处理这个问题?
  • 更改模板和css/sass也可能会改变现有功能。
  • 更改底层模型代码可能会破坏依赖它的现有控制器/接口。

一个解决方案(一个糟糕的选择)是在新功能中编写代码并将其封装在只显示/使用它的逻辑中,如果用户具有“测试”角色。问题在于,当你最终把它活下来时,你可能会有很多解开/改变。这既浪费时间,也可能引入错误。

另一种解决方案是运行应用程序关闭一个子域名和路由用户公测作用,它的一个单独的“测试版”的分支。问题在于,ssl证书,电子邮件链接和其他依赖于域的问题的复杂性使得这有点维护痛苦(尽管不如第一种解决方案那么糟糕)。

我怎样才能提供这种最有效,以减少额外的工作来维持,然后公测切换到完整版?

一种可能性考虑:让破坏性的(即单向的,不可逆的)改变你的模型可能超出抑制你提供这个测试功能的能力的原因是有问题的。例如,如果您在迁移期间遇到问题,则可能难以从更改中退出。

相反,我会建议寻找方法来只添加到模型:添加同时留下列老在原地向后兼容性列,如果你使用它们,等版本存储过程如果需要更改列数据类型,请改为创建目标数据类型的新列,然后让您的迁移也将新列中的现有行数据从旧列复制到新列。然后,您可以在测试环境中执行数据库迁移,并确认应用程序的旧版本和新版本都可以继续使用数据库更改。服务于您的应用程序的多个版本

一个可能的方法是使用一个替代的respond_to格式进行Beta版的网站。您可以在您的ApplicationController中创建一个方法来检查用户是否处于测试阶段。如果为true,则可以覆盖request.format值,并且在respond_to块中有一个“format.beta”类型的响应。

这种方法的挑战是控制器逻辑。如果不在控制器方法中嵌入某种开关逻辑,您将无法更改控制器代码路径。这可能不是主要问题,具体取决于您有多少控制器更改。

(顺便说一下,看起来我们有非常相似的名字!:-))

我能想到的是一样的东西在你的用户表中的列USER_TYPE。以便您可以将它们标记为测试版用户。 (即使你可以使用这个标志为默认,这样你不需要改变现有的代码,所有谁创建的新用户将测试用户。)

对于这个我假设

你给所有功能给您的测试版用户 Beta用户将具有相同的功能,这将在未来由普通用户使用。

**唯一的好处是,你可以过滤测试用户,当他们被登录。当你可以这样做,允许登录与否等。

当你切换到完整版本只需更新测试版用户作为普通用户

我不知道这是怎么适用于您的方案。

感谢

sameera

+0

感谢samerra,我这样做类似。用户可以有多个角色(管理员,基本,高级等),其中之一将是“测试版”。我遇到的问题是,部署测试版功能有时需要数据迁移和其他重大检修。不幸的是,这可能会导致应用程序的非beta版原始版本不兼容(例如,如果从数据库中删除某个字段)。我主要是问人们如何处理这个问题。 – chrishomer 2010-08-30 18:55:27

我个人不认为这是一个坏主意与具有公测角色的用户检查包装代码。搜索所有呼叫将很容易,例如if current_user.authorized?(:beta),并将其全部删除。

+0

这很公平。我并不完全反对这个选择。只是想知道人们是否做了其他事情。 – chrishomer 2010-09-03 04:46:46

我觉得这几样测试的唯一合理的工作机会,而不会影响当前的应用程序将使用一个“升级”环境,实际上只是重定向测试版用户到该环境。

相比与域名有关的功能的问题实在是没有什么比迁移/功能性问题。

在我们公司,我们做的正是这一点,但我们没有测试用户的事情,但是没有分离的环境将是非常不能存活,保持新功能,从目前的功能搞乱。

为特色,只是用不同的分支,为这些新的功能,并从该分支创建“分期”的环境中,一旦特征已经过测试,你只需将它们合并到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

我想要做的一件事是建立一个实际上是生产环境的测试“分级”环境。这个想法应该是让beta.mydomain.com然后发送那些希望尽早获得功能的用户。基本上,它只是一个部署到现场测试版网站的分支。