插件和Ruby宝石之间的区别?

时间:2011-04-02 04:45:25

标签: ruby-on-rails ruby plugins gem

插件和宝石有什么区别?每种用途有何不同?你在哪里以及为何使用其中一个?

2 个答案:

答案 0 :(得分:38)

宝石

  • Gem是一个打包的ruby应用程序,使用RubyGems定义的打包系统。
  • Rails本身就是一个宝石。

      

    Rails gem安装在jruby-1.0 \ lib \ ruby​​ \ gems \ 1.8 \ gems \ rails-1.2.3中,如下所示:

       DIR bin
       DIR 内置
        68,465 CHANGELOG
       DIR 配置
       DIR 发送中    DIR doc
       DIR 环境
      307 fresh_rakefile
       DIR 助手
       DIR html
       DIR lib
         1,072 MIT-LICENSE
        11,969 Rakefile
         8,001自述文件   lib目录包含所有gem源代码。

  • 我们可以安装,升级和查询gem版本。如果使用像GemInstaller这样的工具,可以使用一个简单的配置文件轻松自动安装和加载RubyGems。

  • 安装了Ruby解释器的Gem可以由该解释器在系统范围内使用。
  • Gem可能会作为插件发布。
  • 也可以在供应商/宝石中出售。

插件

  • 插件是Rails框架的扩展。
  • 无法使用命令升级。要升级,必须卸载然后安装升级版本。
  • 必须挂钩到rails应用程序。 (必须有init.rb)
  • 有一个install.rb文件。
  • 插件无法作为Gem发布。
  • 只能在应用程序范围内使用。
  

Goldspike插件安装在应用程序的vendor \ plugins \ rails-integration目录中:
        7,089 build.xml
        1,141 LICENSE.txt
         DIR 插件
        6,675 pom.xml
        1,447自述文件          DIR 样本
    plugins / goldspike目录由
组成            24 init.rb
           25 install.rb
            DIR lib
          549 Rakefile
          536自述文件            DIR 任务
           DIR 测试
  lib目录包含所有插件源代码。

Gem vs Plugins

  • Rails有一种从vendor / plugins /目录加载插件的方法。这很可能会弃用,因为Rails已经添加了对与项目捆绑宝石的支持 在vendor / gems /目录中。 rspec的gem版本是用于日常使用的版本。除非您在1.2.x系列或更早版本中支持Rails应用程序,否则应该使用它们。
  • 使用Gems登录和签出存储库通常会变得更快,因为您不在实际应用程序中包含库。 使用与分布式团队中软件版本不兼容的插件相关的问题通常较少。
  • 一般的经验法则是将Rails特定的功能作为一个插件,同时将更多通用的Ruby库变成宝石。

答案 1 :(得分:8)

Gems安装在系统级别,而插件安装在应用程序级别。这意味着如果两个或多个应用程序在同一台服务器上运行,它们可以共享宝石,但每个应用程序都有自己的插件。现在我建议使用gems,因为随着应用程序的扩展,它们更容易维护。