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"