我有一些逻辑代码可以直接剪切并粘贴到我拥有的几个不同的站点上(它的代码与我创建的Web API交互)。考虑到这不是DRY,当我更新一件事时,我希望它在我的所有网站上更新,我想将其移动到gem或插件。我的主要问题是在这种情况下最好使用哪一个?
一个很大的问题是这段代码是私密的,不应该只对任何人开放。
由于
答案 0 :(得分:1)
Gems 是打包和发布Ruby库的事实标准。
在Rails应用程序中使用gems而不是插件曾经存在两个主要缺点。 Gems无法访问插件所具有的所有功能。例如,在Rails 2中,gem无法直接向应用程序添加 rake任务。在Rails 3中,插件和宝石是完全相同的。
第二个缺点是宝石很难与您的应用程序捆绑在一起。这已由rake gems:unpack:dependencies
解决a while ago。它会将您的应用所依赖的所有宝石复制到您应用的vendor/gems
应用中。如果将这些部署在应用程序中,则无需在远程服务器上安装它们。在Rails 3中,新的gem bundler进一步改进了这种机制。它甚至允许你捆绑Ruby C-extensions!
还要考虑使用插件无法完成的事情:版本控制,打包,依赖管理,扩展Ruby等。
在我看来,没有严重的理由再使用插件而不是宝石了。当Rails 3发布时,插件的最后一个优点将是无效的。 传播这个词,并帮助每个人将他们的插件转换为宝石!
答案 1 :(得分:0)
让我们看看优点/缺点:
封装的代码,可用于机器上的所有应用程序
的webapp代码和宝石代码没有被封装在一起。
你不需要rubygems。
更多难以更新比宝石的代码
我认为这是所有的差异。现在的决定是你的:)
对于我来说这两种解决方案都行,你要想想你的需求。
希望有所帮助。
答案 2 :(得分:0)
您是否会同时在生产中使用此API的多个版本?
如果没有,插件的简单性和灵活性可能更容易,特别是如果您使用像Piston这样的工具从集中式代码库安装/更新插件。
答案 3 :(得分:0)
宝石对私人物品来说不太方便,因为它们的分布方式非常方便。手动分发它们避免使用gem主机是一种开销。如果是我和我有一段私有代码我需要在一堆地方使用,我只需将它作为fake git submodule扔进lib / dir。然后偶尔拉一下。