如何在Ruby代码中获取当前应用可用Gem的本地版本?
如何在Ruby代码中检查当前应用bundle内的Gem版本
查询单个Gem的版本
如果你想获取当前bundle中某个特定Gem的版本,直接用Bundler提供的API就可以,它会严格对应你的Gemfile.lock里的版本,不会取系统中其他安装的版本:
# 替换成你要查询的Gem名称 gem_name = 'rails' begin # 从bundle加载的specs中查找指定Gem gem_spec = Bundler.load.specs.find_by_name(gem_name) puts "#{gem_name} 的版本是: #{gem_spec.version}" rescue Bundler::GemNotFound puts "#{gem_name} 不在当前应用的bundle中" end
这个方法的好处是只针对当前应用的bundle环境,完全符合你要的“当前应用可用”的要求,不会受到系统全局Gem的干扰。
列出bundle中所有已安装的Gem
如果需要先获取所有bundle内的Gem列表再自行过滤,用下面的代码可以遍历输出所有Gem的名称和版本:
# 遍历bundle中所有Gem的spec信息 Bundler.load.specs.each do |spec| puts "#{spec.name}: #{spec.version}" end
运行这段代码后,你会得到和bundle list命令输出类似的结果,但这是在Ruby代码里直接获取的,方便你后续做过滤、存储等操作。
注意事项
- 确保你的代码运行在Bundler管理的环境中:比如在Rails控制台里执行,或者在脚本开头添加
require 'bundler'和Bundler.setup来初始化bundle环境。 Bundler.load.specs返回的是Gem::Specification对象的数组,每个对象包含Gem的名称、版本、依赖等完整信息,你可以根据需求提取更多字段。
内容的提问来源于stack exchange,提问作者iconoclast
相关产品推荐
相关产品推荐

