找一个宝石的根

时间:2015-08-06 04:35:33

标签: ruby

我有2个宝石,gemAgemB。我希望将gemA安装到B中,我希望A能够操作B&#39的文件系统。

此过程的第一步是找到gemB的根目录。

在gemA中:

module GemA
    def self.manipulate_B
         puts __dir__
    end
end

在gemB中:

module GemB
    def self.get_manipulated_by_a
         GemA.manipulate_B
    end
end

运行GemB.get_manipulated_by_a后,我得到了这条路径:

/home/jay/.rvm/gems/ruby-2.2.1/gems/gem_a-0.1.0/lib/gem_a/

我得到gemA的近根,作为宝石安装。方式,远离我想要的方式。我想要

/home/jay/Documents/Projects/gem_b

当然,如果在gemA

中安装了gemN
/home/jay/Documents/Projects/gem_n

更新

我应该说,但是GemB正在开发文档中,而GemA是一个安装好的宝石来帮助开发GemB。未安装GemB。我当然不想修改已安装gem的内容!如果你看看我的路径,你可以看到我的意思!

此外,这必须是可能的,因为Rails.root做到了......也许我会看一些酱......

1 个答案:

答案 0 :(得分:2)

通常,您可以使用以下命令获取gem的安装位置:

gem list <gem_name> -d

或者,如果您使用的是bundler,那么您也可以使用:

bundle show <gem_name>

例如,要查看rspec gem的位置,我会这样做:

➜  gem list rspec -d

*** LOCAL GEMS ***

rspec (3.2.0)
    Authors: Steven Baker, David Chelimsky, Myron Marston
    Homepage: http://github.com/rspec
    License: MIT
    Installed at: /Users/rislam/.rvm/gems/ruby-2.2.1

    rspec-3.2.0

查找gem位置的另一种方法是使用Gem::Specification.find_by_name方法,如下所示:

2.2.1 :006 > spec = Gem::Specification.find_by_name("rspec")
 => #<Gem::Specification:0x3fd94f85bd04 rspec-3.2.0> 
2.2.1 :007 > spec.gem_dir
 => "/Users/rislam/.rvm/gems/ruby-2.2.1/gems/rspec-3.2.0"