我有2个宝石,gemA
和gemB
。我希望将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
做到了......也许我会看一些酱......
答案 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"