【问题标题】:What is the difference between Ruby Gem and Rails plugin?Ruby Gem 和 Rails 插件有什么区别?
【发布时间】:2009-09-07 11:45:32
【问题描述】:

据我所知,唯一的区别在于“安装”。我还听说插件更难更新。但是我想安装一些插件而不是 gem 吗?

【问题讨论】:

  • 请注意,RubyGem 也可以用作插件。

标签: ruby-on-rails rubygems


【解决方案1】:

宝石:

  • 可以处理依赖关系
  • 可以在系统范围内安装
  • 也可以出售(vendor/gems
  • 有版本的概念,可以轻松指定你想要的版本

插件:

  • 对作者来说很容易发布

显然,插件的唯一优势是强大的优势,因为插件仍然很常见。我倾向于同意。发布插件 = 创建一个 github 存储库。发布一个 gem 需要你创建一个 gemspec,甚至可能涉及到 Gem Beast (rubyforge),它们都是 PITA。

【讨论】:

  • 嗯,gemcutter 现在,这有点简单。
【解决方案2】:

我想说这个问题可能会引起争论,哪个是最好的方法,但我的想法仍然是..

如果给定选项,我会说在插件上使用 gem 的最大胜利是 gem 依赖项。

Rails 插件不处理依赖项,因此如果您安装的插件依赖于其他插件/gems,则额外安装这些插件会带来不便。安装 gem 可以同时引入它运行所需的任何依赖项。以黄瓜宝石为例:

'sudo gem install cucumber' 将安装 cucumber gem,但也会安装其依赖项,例如 webrat gem。

这似乎不是什么大事,但是当您处理多个环境(开发、登台、生产等)时,您更容易遇到依赖问题。

您可能需要插件而不是 gem 的唯一情况是您想要方便地访问插件代码。一种情况可能是插件实际上是 Rails 引擎,您需要快速深入研究代码并查看要覆盖的类/视图。另一种情况可能是,如果您分叉了一个插件,例如 active_merchant,并将其设置为 vendor/plugins 中的 git 子模块。在这种情况下,向上游提交和推送更改往往更方便。

至于更难更新,gems 有 ruby​​gems 来管理它们,这很简单,如果你碰巧使用 git,那么子模块插件更新是轻而易举的:

# installing a plugin as a git submodule
git submodule add git://path_to_plugin_git_repo.git vendor/plugins/plugin_name

# updating said git submodule
cd vendor/plugins/plugin_name
git remote update
git rebase origin/master
cd ../../..
git add .
git commit -m "update plugin_name to latest master."

或 SVN 外部的等价物

将某些东西安装为 gem 或插件不应该影响代码的功能,因为它们只是打包代码的两种不同方式,最终归结为我猜你觉得更方便使用的方式。就我个人而言,我发现 gems 更容易维护,除非我可能会陷入代码中,然后一个子模块插件对我更有利,因为它会显示在我的编辑器的项目树中。

【讨论】:

  • 我刚试过,它需要是 git submodule add git://path_to_plugin_git_repo.git vendor/plugins/plugin_name
【解决方案3】:

如果可能,我总是使用 gem,因为我觉得让它们保持更新更容易。

然而,一个主要的烦恼是 gems 不能提供 rake 任务,但插件可以。例如,当您尝试执行 rake paperclip:refresh 却被告知任务不存在时,这通常会导致挫败感。

解决方案是将 gem 的 rake 任务复制到您的应用程序任务目录。

【讨论】:

  • 这个答案已经过去 2 年多了,我认为不再存在烦恼,例如stackoverflow.com/questions/742633/…
  • 啊,很高兴知道!我认为是 Rails 3 中的一个变化促成了这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2023-04-02
  • 2011-07-28
  • 2013-05-21
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多