在Ruby on Rails中,将某些内容安装为gem还是作为插件有什么区别?

在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通过gem list -r delayed_job安装版本)是http://github.com/tobi/delayed_job吗? “插件”方法明确表示它是集体版本? 你安装哪一个不重要吗?

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

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

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

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

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

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

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

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

 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以比较使用过的排队gem

当您安装gem时,它将适用于所有应用程序,以防您使用插件 – 仅适用于已安装的应用程序。

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

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

我们有两个应用程序app1app2

两者都运行在一个名为gemset1的常见rvm gemset

当你在app1的gemfile中添加一个gem并运行bundle install然后在同一个rvm gemset是gemset1时 ,如果你运行第二个app app2,那么gem也将在第二个应用程序中可用

而对于插件,情况并非如此,因为插件安装在应用程序级别而不是系统级别