插件和gems之间有什么区别?它们有什么不同的用途?在哪里,为什么要用一个而不是另一个?

推荐答案

Gem

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

    Rails gem is installed in jruby-1.0\lib\ruby\gems\1.8\gems\rails-1.2.3 as:

    DIR bin
    DIR builtin
    68,465 CHANGELOG
    DIR configs
    DIR dispatches
    DIR doc
    DIR environments
    307 fresh_rakefile
    DIR helpers
    DIR html
    DIR lib
    1,072 MIT-LICENSE
    11,969 Rakefile
    8,001 README
    The lib directory contains all the gem source code.

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

  • 为Ruby解释器安装的Gem可以被该解释器在系统范围内使用.
  • Gem可以作为插件发布.
  • 也可以在供应商/Ruby 中出售.

Plugin

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

Goldspike plugin is installed in vendor\plugins\rails-integration directory of the application as:
7,089 build.xml
1,141 LICENSE.txt
DIR plugins
6,675 pom.xml
1,447 README
DIR samples
plugins/goldspike directory consists of
24 init.rb
25 install.rb
DIR lib
549 Rakefile
536 README
DIR tasks
DIR test
The lib directory contains all the plugin source code.

Gem vs Plugins

  • Rails有一种从vendor/plugins/目录加载插件的方法.这很可能会遭到反对,因为Rails增加了对将gemsBundle 到项目中的支持
  • 使用Gems签入和签出存储库通常会更快,因为实际应用程序中没有包含库.
  • 一般的经验法则是将特定于Rails的功能作为插件,同时将更通用的Ruby库变成gems.

Ruby-on-rails相关问答推荐

Rails 7.1.3如何在生产环境中查看堆栈跟踪

DELETE_IF和REJECT的意外行为!方法

如何在不触发每次编译的情况下运行`bin/rails测试`?

如何将 ActionController::RoutingError 分类为 Sentry 中的错误

NoMethodError:Puma::Events:Class 的未定义方法字符串

rails 3.2 迁移无法在更改方法中向 create_table 添加索引

如何将 Ruby 哈希转换为 XML?

在 Ruby on Rails 中获取空临时目录的最佳方法是什么?

使用 javascript 提交 Rails 远程表单

我如何存根 find_each 以在 rails 3 中进行 rspec 测试

从子类中的重载方法调用基类方法

mongoid 中 embeds_many 和 has_many 的区别

不带参数的 request.fullpath

如何解决弃用警告方法 to_hash 已弃用并将在 Rails 5.1 中删除

我收到在扫描下一个令牌时发现无法启动任何令牌的字符

Rails Rake 任务 - 访问模型类

你如何覆盖 form_for 助手中的类名?

按照给定 ID 数组的顺序按 ID 查找模型记录

您可以在弹性 beantalk 环境中运行 rails 控制台或 rake 命令吗?

我如何为 Rails3/Bundler 供应 gems