以编程方式检查gem中是否包含gem?
在运行时,在完成捆绑器设置并应用组之后,以编程方式检查给定gem_name
是否在捆绑中的最佳方法是什么?
通过阅读源代码,我发现了Bundler.definition
,例如
gem_name = 'banana' Bundler.definition.dependencies.map(&:name).include?(gem_name)
但无法找到文档1 ,我不知道这是否是推荐用法。
更新:看起来Bundler::Definition#dependencies
返回所有依赖项,而不管组。 作为替代方案,我发现了Bundler::Runtime#dependencies_for
,它将组作为参数。
Bundler.load.dependencies_for(:default, Rails.env).map(&:name).include?(gem_name)
但是,在每个呼叫站点复制“组列表”似乎是个坏主意。 理想情况下,我想在Bundler
中使用一种方法,不需要我指定当前组。
1 bundler网站和手册页专注于命令行使用。 我还没有找到有关gem的公共ruby API的任何文档。 源代码中的注释很有帮助,但主要关注数据类型等。
Bundler用于设置应用程序gem,因此您可以使用Gem
API而不是Bundler
:
Gem.loaded_specs.has_key? gem_name
Bundler将进行设置,以便捆绑中的任何gem(在适当的组中)已被激活(因此它们将在loaded_specs
具有条目)并且将阻止加载任何其他(非捆绑)gem。
- 在新的RHEL6服务器上安装ruby-filemagic gem时遇到困难
- 不知道如何在Ubuntu natty上构建rake db:migrate?
- Jekyll服务错误:找不到gem jekyll(> = 0.a)(Gem :: GemNotFoundException
- 如何修复Rails 3(bundler)中的这个gem依赖问题?
- 由于缺少sqlite3 gem,Rails 4.0rc1应用程序未运行
- 如何覆盖gem依赖?
- 为什么’rspec spec’比’bundle exec spec’运行得更快,使用的资源更少
- capistrano错误消息:请安装pg适配器:`gem install activerecord-pg-adapter`(无法加载此类文件 –
- 在ffi上捆绑更新失败