Ruby on rails 如何要求forked gem lib文件?名字冲突?
我必须分叉gem,因为我的cli有一个命令Ruby on rails 如何要求forked gem lib文件?名字冲突?,ruby-on-rails,ruby,rubygems,Ruby On Rails,Ruby,Rubygems,我必须分叉gem,因为我的cli有一个命令run,它保留在Thor库中,在.gempec中将其名称更改为millisami Thor,如下所示: Gem::Specification.new do |s| ... s.name = 'millisami-thor' ... end 为了使用它,我将名为millisami-thor的gem推送到rubygems.org,并在我的cli项目的gem文件中放入gem'millisami-thor',:require=>thor' 现在,在测试bu
run
,它保留在Thor库中,在.gempec
中将其名称更改为millisami Thor,如下所示:
Gem::Specification.new do |s|
...
s.name = 'millisami-thor'
...
end
为了使用它,我将名为millisami-thor
的gem推送到rubygems.org,并在我的cli项目的gem文件中放入gem'millisami-thor',:require=>thor'
现在,在测试bundle exec cumber特性时,或者在尝试可执行文件时,只需执行/bin/executable--params
,就可以了
现在,我用gem build gemname.gempec
构建gem,它生成gemname.gem
,并用gem install gemname.gem
安装,它也会被安装以及二进制文件。很好,直到这里
现在,当我使用二进制cmd,比如executable--params
,它会查找原始的thor
库,而不是分叉的库
我发现这是由于可执行文件中的require…
require 'thor'
require 'fileutils'
require 'gemname/cli'
Cf::CLI.start
因为在那里我明确要求原始的thor
。
现在,当我将其更改为“需要millisami thor”时,它无法找到并显示:
...
custom_require.rb:36:in `require': no such file to load -- millisami-thor (LoadError)
...
在gem文件中,我可以执行gem'millisami-thor,:require=>'thor'
以便加载分叉的gem。
但是,如果只是需要“millisami thor”
,我怎么能做同样的事情呢
我能想到的唯一选择是将所有类名改为“MillisamiThor”,而不是“Thor”,文件名也改为“Thor”。但这将是太混乱和丑陋
如果我之前安装了我的gem并进行了测试,我可能会发现这一点。但是我只是在测试环境中做的,在测试环境中,bundler需要millisami-thor
的thor
文件,所以直到今天我才遇到这个问题
有没有其他方法可以在没有任何混乱的黑客攻击的情况下实现这一点?您可以保留原始的gem设置,并将Bundler指向您的git存储库分支:
gem 'thor', :git => 'git://github.com/yourname/thor.git', :require => 'thor'
甚至是本地路径
gem 'thor', :path => '/path/to/thor.git', :require => 'thor'
问题不在于bundler和Gemfile指向我的分叉github回购。当gem被打包和安装时,它将被激活。我认为在通过
gem build gem_name.gempec
构建.gem
时,不会考虑分叉回购url。因为它的CLI应用程序不像rails、sinatra等。。。