您如何为下一个项目选择正确的Ruby gem?

时间:2011-09-16 13:37:47

标签: ruby-on-rails ruby design-patterns

假设您在过去六个月中使用遗留系统项目,大型公司过时的网络平台,整合了外来数据结构。

现在你终于离开了,你可以在Ruby中使用一个全新的启动项目。

应用程序将从头开始构建,由您决定要使用哪个gem。

问题可以扩展到构建全新Web应用程序的各个方面,但为了简单起见,假设您需要一个身份验证系统。

现在,你最后一次在Rails中实现了“authlogic”并且与“authentication_fu”相比它真的很酷,但是当你在“洞穴中”你刚刚听到其他几种方式进行身份验证时,像清除,设备,omniauth,监狱长,巫术,twitter-auth,open_id_authentication以及其他人。

即使最糟糕的是,假设你可以“想象”Ruby社区没有睡觉,在六个月内,她正在酝酿关于“身份验证模式”的新想法和范例,但是你没有找到时间进行更新。

你只是想到外面看看发生了什么,找到所有新的宝石,并决定什么填补你的下一个项目。

你是怎么做到的?

提前致谢 Luca G. Soave

UPDATE Sep 18 10:36

Ruby toolbox通过Andrew Grimm描述的指标比较同一类别的宝石

UPDATE Sep 17 02:09 

有几个人试图澄清这个过程,以发现并为“下一个全新的Ruby项目”选择合适的Ruby gem。我想通过列出我的主要步骤中的内容来总结我从每个人那里学到的东西:

关于在同一领域中决定宝石的过程:

  1. 自己尝试一些 - 通过semperos
  2. 给他们每个人一个试驾,确保github上有很重的活动,看着最后 承诺 - 通过ealdent
  3. 选择松散耦合的宝石与单一框架,优先考虑敏捷,快速实施和连续重构 - 作者:Craig Stuntz

  4. 获得宝石/域名专家,以便能够在宝石之间做出决定 - 通过james_schorr

  5. 不要为您的生产客户项目选择“WOW-things和Cool Fresh版本”,而是每天在小型和私人测试项目上进行测试 - 由mikhailov
  6. 关于发现和发现的过程选择合适的宝石,最后一个由jeremiahd选择,是对这个过程的深刻,清晰和非常有用的描述:

    • 搜索覆盖我的用例的最常安装的库
    • 看看他们的文档,看看它看起来有多完整和可读
    • 查看他们社区中的活动:更新 - 邮件列表 - 维基 - IRC - 承诺 - 心情
    • 看看他们的代码:测试套件 - 干净的代码 - 文档 - 有用的评论 -
    • 使用他们的代码
    • 社区和代码的质量
    • 将其作为一个学习过程,让一个更好的程序员并回馈您的社区

      END UPDATE Sep 17 02:09

    随意添加更多内容,...分享您的观点。

7 个答案:

答案 0 :(得分:4)

我所做的(当这个问题出现在任何语言中时)是我在寻找最常见的安装库来覆盖我的用例。然后我看看他们的文档,看看它看起来有多完整和可读。

接下来我查看他们社区中的活动 - 项目是否正在积极更新?是否有易于访问的邮件列表/维基/ IRC?他们有多活跃?一般的基调是什么?

接下来我查看他们的代码。有测试套件吗?他们是测试套件,帮助我理解图书馆吗?代码干净了吗?记录?评论有用吗?它看起来像是一个荒谬的混乱,还是像它曾经想到的那样在每一点都加入它?

接下来我以简化但相似的方式使用他们的代码,以实际上我需要如何使用它。我遇到过任何重大绊脚石吗?

拧一枚硬币并粘上它。迟早,无论你使用哪种lib都不能满足你的需求,你也会想要修改它的行为。当那个时候到来时,社区的质量代码的质量是使图书馆彼此脱颖而出的原因。

这当然有点模糊。它可能是一个具有挑战性的事情,但你会成为一个更好的程序员,并且假设你做得足够多,你可能会在某些时候向你上游使用的库做出贡献,这非常棒。

答案 1 :(得分:3)

选择一个并运行它。重要的不是你现在选择,但是在未来六个月改变主意是多么困难。简而言之,您的努力不应该做出一个永久的决定,它将在项目的生命周期中绑定您,而是将授权系统上的依赖关系隔离到一个(尽可能多)小且易于交换的代码位

答案 2 :(得分:3)

在我看来,你应该自己尝试一些

似乎Devise已成为事实上的选择,其机制支持各种身份验证样式。这可能是开始的一个好地方,但你显然应该尝试让它做你想做的事情,如果它不起作用,试试你提到的其他宝石。

Rails没有预先构建的“默认”身份验证机制,因为身份验证往往特定于每个项目。尝试几个,看看哪个最适合您的需求和编程风格。

答案 3 :(得分:3)

我主要赞同Craig Stuntz,你应该选择一个并运行它(并构建你的应用程序,以便在可能的情况下将其换出)。

但是,我会建议,这样做意味着你给每个人一个试驾。也许你不会在你的主项目中这样做,但实际上,在你真正使用这个东西之前,你永远不会知道它是多么混乱。无论今天社区如何热爱宝石,你都可以确定它存在严重的问题。

对于相对较新的宝石,你还需要确保github或其他任何东西都有大量活动,这样宝石不会很快停滞不前。如果我在过去几周内没有看到提交,那么使用尚未成熟的宝石会让我感到非常不安。

答案 4 :(得分:2)

我花了很多时间查看身份验证宝石并登陆Devise。这太好了。所有上述提示都很棒。

答案 5 :(得分:2)

我写了一篇关于这个问题的博客文章 - 如何选择正确的Ruby Gem?

http://www.railstutors.com/blog/how-to-pick-the-right-ruby-gem

主要想法 - 首先检查是否真的需要宝石来做你想做的事情;然后考虑一下如何评估Ruby gem。我也碰巧使用身份验证作为用例,所以你可能会发现它很有趣。

答案 6 :(得分:1)

这是我的日常选择,明天我们的方式是满足客户需求。如何在稳定可靠的系统中保持用户满意度?

首先,我们不接受WOW-things和Cool Fresh版本。我们将在0.5年内使用新的东西,作为测试期。是的,我们仍然在Rails 2.3.10上。我们将在下个月升级到Rails 3。我们有代码库,核心由测试覆盖,Rspec为我们做了很好的工作,大约有94个测试。

但是,我们在日常开发过程中尝试现代宝石,并进行小型项目以了解它们的工作原理。它简单而且免费,只花时间。 Railscasts也满足了对酷炫东西的兴趣,重要的是要看到它们中的每一个。