Ruby 找到一颗宝石';根

Ruby 找到一颗宝石';根,ruby,Ruby,我有两颗宝石,gemA和gemB。我希望gemA安装到B中,我希望A能够操纵B的归档系统 此过程的第一步是查找gemB的根 在杰马: 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_-oper

我有两颗宝石,
gemA
gemB
。我希望
gemA
安装到B中,我希望A能够操纵B的归档系统

此过程的第一步是查找
gemB
的根

在杰马:

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_-operated_-by_a
时,我得到以下路径:

/home/jay/.rvm/gems/ruby-2.2.1/gems/gem_a-0.1.0/lib/gem_a/
我得到了
gemA
的近根目录,作为gem安装。离我想要的太远了。我想要

/home/jay/Documents/Projects/gem_b
当然,如果
gemA
安装在
gemN

/home/jay/Documents/Projects/gem_n
更新

我应该说,但是GemB正在文档中开发,GemA是一个安装的gem,用于帮助开发GemB。未安装GemB。我当然不想修改已安装gem的内容!如果你看看我的道路,你就会明白我的意思


另外,这必须是可能的,因为Rails.root能做到这一点……也许我会看一些调味汁……

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

gem list <gem_name> -d
另一种查找gem位置的方法是使用
gem::Specification

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" 
2.2.1:006>spec=Gem::Specification.按名称(“rspec”)查找
=> # 
2.2.1:007>规格宝石目录
=>“/Users/rislam/.rvm/gems/ruby-2.2.1/gems/rspec-3.2.0”

为什么要这样做?你想达到什么目标?2个理由,2个宝石。1是重命名某些文件和文件夹。2是为了事务测试目的将一些文件同步到另一个目录中。我觉得操纵另一个gem的文件结构是个坏主意。如果另一块宝石是你的,只要根据你的需要改变它就行了。如果它不是你的,那么不要试图改变它的内部结构,你可能会弄坏它。@spickermann完全同意!澄清
➜  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
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"