在Ruby on Rails中,安装gem或插件之间的区别是什么?

时间:2010-09-02 18:12:37

标签: ruby-on-rails rubygems ruby-on-rails-plugins

http://github.com/collectiveidea/delayed_job

它说:

  

要安装为gem,请将以下内容添加到config / environment.rb:
       config.gem 'delayed_job'
  运行rake gems:install

  

安装为插件:
    script/plugin install git://github.com/collectiveidea/delayed_job.git

将它安装为gem还是作为插件有什么区别?

另外,第一种方法只是安装gem 2.0.3,这可能是tobi的版本? (rake gems:install按[{1}}安装版本)是http://github.com/tobi/delayed_job吗? “插件”方法明确表示它是集体版本?你安装哪一个不重要吗?

4 个答案:

答案 0 :(得分:4)

Gem和vendored插件都引用了collectiveidea的分叉。实际上,collectiveidea是RubyGems上delayed_job Gem的当前维护者。

也就是说,一般来说,将插件安装为Gem有很多优点。

  • 您可以安装一次并在许多不同的项目中使用它
  • 您可以利用依赖项解析
  • 您只需升级版本号即可升级
  • 您无需将整个插件代码存储在SCM中

那么,为什么你可以安装插件“作为插件”? 有许多不同的答案。

最初,Rails插件就像简单的库一样。时间过去了,开发人员开始注意到将插件打包为Gem的优势。

此外,在Rails 3之前,一些插件功能仅保留给插件而不保留给Gems。例如,在Rails 3之前,插件可以捆绑rake任务,而没有办法将新的rake任务或新路由注入主应用程序。

在过去两年中,Rails插件的大部分内容都可以作为插件或Gem安装。随着Rails 3和Bundler的到来,我确信插件将被弃用以支持Gems。

答案 1 :(得分:2)

这是两个不同的存储库, 也许你应该尝试

config.gem 'delayed_job', :source => http://github.com/collectiveidea/delayed_job.git

请注意:http://ryandaigle.com/articles/2008/4/1/what-s-new-in-edge-rails-gem-dependencies

顺便说一下。也许你想看一个更好的解决方案:resque - 请参阅http://ruby-toolbox.com/categories/queueing.html以获得使用过的排队宝石的比较

答案 2 :(得分:1)

安装gem时,如果您使用插件,它将适用于所有应用程序 - 仅适用于已安装的应用程序。

答案 3 :(得分:0)

基本的区别是gem是安装在运行Rails应用程序的系统上的东西,而插件是与您的应用程序一起安装的,插件不会安装在系统级别上。

假设你正在使用rvm,让我们举个例子。

我们有两个应用 app1 app2

两者都在名为 gemset1

的常见rvm gemset上运行

当您在 app1 的gem文件中添加gem并运行bundle install然后在同一个rvm gemset gemset1 时,如果您运行第二个应用< strong> app2 gem也可以在第二个应用程序中使用

虽然插件不是这样,因为插件安装在应用程序级而不是系统级