我有一个ruby gem(让我们称之为my_gem
)暴露可执行文件(让我们称之为my_exe
)。当我将gem "my_gem", "0.0.1"
添加到应用程序的Gemfile并运行bundle exec my_exe
时,我在调用Gem::Specification.find_by_name("my_gem")
时正确获取版本0.0.1的gem规范。
我需要这个可执行文件才能在没有捆绑包的情况下工作。当我执行
my_gem _0.0.1_
并查看Gem::Specification.find_by_name("my_gem")
的值,我获得了系统上最新安装的my_gem
版本的规范。
如何让Gem::Specification.find_by_name
返回与我传递给exectuable的值对应的gem规范?
更新
我忘了提及一条信息。我无法修改调用Gem::Specification.find_by_name("my_gem")
的代码。在my_exe
调用的第三方库中调用该特定代码行。 (该库是RuboCop,在这里RuboCop尝试加载规范(https://github.com/bbatsov/rubocop/blob/v0.55.0/lib/rubocop/config_loader_resolver.rb#L186)我尝试设置环境,以便Gem::Specification.find_by_name("my_gem")
返回my_gem
版本的规范1 {}位于$LOAD_PATH
上。必须有办法实现,因为bundler
能够实现它。
答案 0 :(得分:1)
Gem::Specification.find_by_name("my_gem", "0.0.1")
如果找不到符合要求的规格,则会引发错误。查看https://ruby-doc.org/stdlib-2.2.3/libdoc/rubygems/rdoc/Gem/Specification.html#find_by_name-method
<强>更新强>
更新我的回答以响应您的更新。
你可能会更好地说明你的工作要做的更高层次。 Bundler是包管理的最佳工具,你真的不想自己做。如果您不知道自己在做什么或者如何尝试实施代码,也许您可以内联Bundler
require 'bundler/inline'
gemfile
gem 'my-gem', '0.0.1'
end
# Do my work