管理 ruby​​ gem 的冲突版本

2023-12-02

我正在构建一个加载用户提供的 ruby​​ 代码的框架。它基本上是一个插件机制。我希望用户提供 ruby​​ 代码以便能够需要自己的 gem。我打算让“插件”包包含一个包含 gem 的供应商目录。

如何加载插件所需的 gem,而不使其与我的框架的 gem 冲突?例如,如果我的框架使用treetop版本1.3.0,并且插件使用treetop 1.4.2,我希望每个框架都使用其指定的版本。

同样,有没有办法防止插件相互冲突?

我研究过 gem_plugin、_why 的沙箱和其他一些工具。但我没有看到任何专门处理这种情况的库 - 我认为它以前已经完成过。

我还研究了 Bundler 的内部结构,了解它如何管理 gem 版本。如果需要的话,我准备做一些相当复杂的事情。但我仍然不确定如何去做。

我在如何实现这一点上也有很大的自由。所以,如果你认为我找错了对象,请说出来。

感谢您的任何建议。

旁注:在编写本文时,我突然想到我需要类似于 Java servlet 容器中的类加载器的东西。 WAR 文件可以包含 jar 文件,并且 Web 应用程序的类加载器将优先选择那些位于全局类路径上的 jar 文件。 ruby 有什么方法可以分段 ruby​​“类路径”(即 load_path、require 等)?


坦率地说,您不能同时加载同一个 gem 的两个版本。

Bundler 在查看所有必需的 gem 并找到各种重叠依赖项的解决方案方面做得很好,但即便如此,它也仅限于一次只能加载一个版本的 gem。

这导致插件开发人员必须不断更新以支持依赖 gem 中所做的任何更改,以避免出现您所描述的情况。

(不要让我开始谈论各种竞争性 JSON 实现所导致的混乱,以及当您有多个 gem 依赖项都需要不同的依赖项时您必须经历的痛苦。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管理 ruby​​ gem 的冲突版本 的相关文章

  • Ruby Net:SSH控制大师?

    我目前有一个 Ruby Rails 应用程序 需要建立大量的短 SSH 连接 使用 Ruby Net SSH 库可以正常工作 只是每次我想发出命令时应用程序都必须登录并协商密钥 这太慢了 有没有办法使用 Ruby Net SSH 启用 Co
  • CSV.foreach 未读取 CSV 文件中的第一列

    第一次学习Ruby来自动清理一些CSV文件 我已经设法从其他 SO 问题中拼凑出下面的脚本 但由于某种原因 该脚本没有读取原始 CSV 文件的第一列 如果我添加一个虚拟的第一列 一切都会完美运行 我缺少什么 require csv COLU
  • 用 ruby​​ 中的数组内容替换字符串?

    String Test string Test array link1 link2 如何替换这样的字符串 输出应该是String link1 string link2 字符串 gsub 可以返回一个枚举器 所以这很简单 string gsu
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • 在 Ruby/Sinatra 中解码 Facebook 的签名请求

    由于 Facebook 不赞成使用新的 FBML 我正在寻找一种新方法来创建 显示 选项卡 向粉丝显示一个版本 向非粉丝显示另一个版本的页面选项卡 Facebook 已将数据添加到signed request 中 当用户在应用程序中选择您的
  • 在 Ruby 中创建带有静态页面的博客的最佳方法

    我刚刚访问了静态网站生成 http www ruby toolbox com categories static website generation html on 红宝石工具箱 http www ruby toolbox com 我不知
  • Groovy 中的显式输入:有时还是从不?

    后来 仍然无法弄清楚 Groovy 是否具有静态类型 似乎没有 或者使用显式类型生成的字节码是否不同 似乎是 无论如何 回答这个问题 One of the main differences between Groovy and other
  • ActiveRecord oracle_enhanced 适配器无法加载 ruby​​-oci8 库

    rails g scaffold失败 但 oci 脚本和 irb 数据查询有效 无法弄清楚出了什么问题 rails g scaffold table field1 integer field2 string invoke active re
  • Ruby 代码到 JAR

    我希望能够将 ruby 程序编译为 java JAR 程序 我研究过 JRuby 看到了几个能够 eval ruby 代码的 Java 应用程序示例 但是是否有更优雅的解决方案允许简单地用 ruby 编写所有内容 然后将其直接编译为 JAR
  • 如何从 Ruby 检查具有特定 pid 的进程是否正在运行?

    如果有多种方法 请列出 我只知道一个 但我想知道是否有一种更干净的 Ruby 方式 之间的区别Process getpgid and Process kill方法似乎是当 pid 存在但由另一个用户拥有时发生的情况 Process getp
  • 使用 Ruby 获取 AWS 区域名称

    我正在为 AWS 开发 Rails 应用程序 并希望为区域名称创建下拉菜单 例如 us east 1 等 如果有人已经创建了 gem 来获取它们 我想使用它 有人知道这样的 gem 或有用的 API 吗 适用于 Ruby 的 AWS 开发工
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • gem install rmagick 在 OS X El Capitan 上失败

    几天前我升级到 El Capitan 并运行了 brew update brew upgrade 它更新了 imagemagick 导致 ruby 的 rmagick gem 停止工作 我想没问题 我就跑 gem install rmagi
  • Capybara 的 has_selector 有哪些选项?

    我在 RSpec 中遇到此错误 有没有任何文档have selector解释了选项哈希中的每个键以及它到底有什么作用 invalid keys content should be one of text visible between co
  • 方法调用中是否有记忆约定?

    我想避免在方法调用中重新评估值 直到现在 我一直在这样做 def some method some method begin lot s of code end end 但它最终变得非常丑陋 在一些代码中 我看到类似以下内容 def som
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 使用 YAML.load 解析 json 安全吗?

    我使用的是红宝石2 1 0 我有一个 json 文件 例如 测试 json item apple 1 banana 2 使用 YAML load 加载此文件是否安全 YAML load File read test json 我正在尝试加载
  • 什么是 - 获取的是一个目录 - 错误消息

    我收到这个奇怪的错误 Users gideon Documents ca ruby rubytactoe lib player rb 13 in gets Is a directory spec Errno EISDIR 玩家规格 rb r
  • 下载所有 gems 依赖项

    我想通过下载任何所需的文件并将它们带到另一台计算机来安装指南针没有互联网连接 我已经下载了指南针的源包 当我在未连接的计算机上运行 gem 时 它抱怨缺少依赖项 有什么解决办法吗 这正是我遇到的问题 经过一段时间的搜索后 我找到了一个可以使

随机推荐

  • Passport-jwt 未经授权

    我是节点js新手 我正在使用护照 jwt 进行身份验证 当我尝试进行身份验证时 它总是显示 未经授权 my 护照 js file const JwtStrategy require passport jwt Strategy const E
  • 在 Firebase 中按孩子的孩子查询

    我在 Firebase 中的对象结构如下所示 KBP27k4iOTT2m873xSE categories Geography true Oceania true correctanswer Yaren de facto languages
  • Python lxml.html XPath“属性不等于”运算符未按预期工作

    我正在尝试运行以下脚本 python from urllib import urlopen urllib request for python3 from lxml import html url http mpk lodz pl rozk
  • c# - 易失性关键字使用与锁定

    我在不确定是否有必要的地方使用了 volatile 我很确定在我的情况下锁是多余的 阅读这篇文章 Eric Lippert 评论 让我对 volatile 的使用感到焦虑 C 中什么时候应该使用 volatile 关键字 我使用 volat
  • 如何控制下拉列表中显示的屏保名称?

    我有一个可用的屏幕保护程序 并且想了解如何控制 Windows 在屏幕保护程序下拉列表中显示的名称 目前 这一切似乎都是基于文件名 但我知道事实并非如此 这是我尝试过的方法和结果 文件名 CC Votd scr屏幕保护程序名称 Cc 文件名
  • Azure 客户端应用程序访问受 AD 保护的 Azure api

    我有一个 Angular 5 应用程序和一个 Web API 应用程序 它们都托管在 Azure 中 它们已在网站级别使用 Azure AD 进行保护 例如不允许匿名访问 浏览 Angular 网站时 它要求我正常登录 然后我就可以访问 a
  • PHP - 从字符串中删除 标签

    嘿 我需要删除字符串中的所有图像 但我找不到正确的方法 这是我尝试过的 但它不起作用 preg replace
  • DateTimeFormatter 月份模式字母“L”失败

    我注意到java time format DateTimeFormatter无法按预期解析 见下文 import java time LocalDate import java time format DateTimeFormatter p
  • 语音识别即服务。(Android)

    我正在开发 Android 应用程序 我的应用程序需要语音识别 但我需要语音识别作为服务 我已经创建了简单的语音识别 当我单击按钮时 它会启动识别器意图 它工作正常并为我提供输出 但是 当用户单击按钮语音识别作为服务启动 在后台 时 我需要
  • Mathematica 中的非交换展开除以加法

    我需要编写一个函数来完全扩展非交换乘法而不是加法 例如 a b c 2 将扩展到a b a c 2从右边开始也是如此 我正在使用 ReplaceRepeated 由于我使用的是 NonCommutativeMultiply 而不是 Time
  • Wpf 按标签和类型查找所有控件

    我正在尝试按类型和标签名称检索所有元素 我已经找到了一些例子 如何按名称或类型查找 WPF 控件 https stackoverflow com a 978352 7444801 我尝试修改其中一些示例 但是它们从未给我想要的结果 所需方法
  • 如何使用 dplyr 在行组之间进行划分

    我有类似的数据 我想要与此链接所述的确切结果 如何使用 dplyr 在行组之间进行划分 然而 与我的数据的唯一区别是 有时 条件 列并不总是有 A 或 B 因此有时没有分母或分子 x lt data frame name rep lette
  • Azure Bing Web 搜索因查询搜索而失败

    我正在使用 Odata4j 当我尝试使用查询执行简单的网络搜索时 在代码的最后一行出现以下异常 PS 如果您觉得有帮助 请投票 谢谢 java lang RuntimeException Expected status OK found B
  • NSRunningApplication,返回最近使用的应用程序列表?

    我正在尝试获取最近使用的应用程序的列表 NSWorkspace返回活动应用程序的列表 我可以使用以下几个选项对它们进行排序NSRunningApplication 参见下面的列表 launchDate finishedLaunching p
  • 如何从日期时间获取 AM/PM 值?

    有问题的代码如下 public static string ChangePersianDate DateTime dateTime System Globalization GregorianCalendar PC new System G
  • Android:使用 ContentObserver 捕获传出短信或接收器不起作用

    我试图使用内容观察器捕获传出的短信事件 TEST OBSERVER ContentObserver co new SMSoutObserver new Handler getApplicationContext ContentResolve
  • 创建一个在 React 中工作的加载动画

    Fiddle var Hello React createClass getInitialState function return gridIsLoaded true animate self console log animating
  • 编译到 LLVM IR 的 Haskell 程序缺少 main

    下列的这个帖子关于Haskell程序的编译 对于 LLVM IR 我采用了相同的 Haskell 程序并尝试运行其生成的 LLVM IR 代码 quicksort quicksort p xs quicksort lesser p quic
  • 发布数据并刷新页面

    我有一个编辑表单页面来编辑我的网站帖子 它使用 post 方法到同一页面 如果表单编译正确 则会显示一条祝贺消息 问题 当用户点击刷新按钮时 脚本会尝试将数据再次重新发布到页面 有办法避免这种情况吗 thanks Luca PRG模式的总体
  • 管理 ruby​​ gem 的冲突版本

    我正在构建一个加载用户提供的 ruby 代码的框架 它基本上是一个插件机制 我希望用户提供 ruby 代码以便能够需要自己的 gem 我打算让 插件 包包含一个包含 gem 的供应商目录 如何加载插件所需的 gem 而不使其与我的框架的 g