繁体   English   中英

如何从Ruby中使用bundler或Rails获取gem的位置?

[英]How to get location of gem using bundler or Rails from within Ruby?

我需要从Rails应用程序中获取gem的当前工作目录。

我目前正在使用

`bundle show foo`.strip

这在我的环境中效果很好,但是:

  • 它很慢,因为它需要加载一个shell
  • 当有人试图在Windows或JRuby上运行应用程序或者当他们的$ PATH指向与用于启动应用程序的ruby不同的ruby时,它可能会破坏

所以我想在没有调用子shell的情况下做到这一点。

Bundler的RDOC没有帮助。 您曾经能够在Rails 2中从Rails本身获取此类信息,但看起来Rails 3允许Bundler处理它。

如果gem位于Gemfile / Gemfile.lock中,则其路径将出现在$LOAD_PATH全局变量中。 你可以利用这个事实:

$:.grep(/activerecord/).first

$:$LOAD_PATH相同。 你可以使用其中之一。

另一种方法:

Bundler.load.specs.find{|s| s.name == 'activerecord' }.try(:full_gem_path)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM