我不得不派生gem Thor,因为我的cli有一个命令run,它保留在雷神库中,在.gemspec中将其名称改为.gemspec:
Gem::Specification.new do |s|
...
s.name = 'millisami-thor'
...
end为了使用它,我将名为millisami-thor的gem推送到rubygems.org,并且在我的cli项目的Gemfile中,我将gem 'millisami-thor', :require => 'thor'
现在,在测试bundle exec cucumber features或尝试可执行文件时,只需执行./bin/executable --params,它就成功了。
现在,我用生成gemname.gem的gem build gemname.gemspec构建gem,并用gem install gemname.gem安装它,它也会被安装和二进制文件。很好,直到这里。
现在,当我使用像executable --params这样的二进制命令时,它会查找原始的thor库而不是派生的库。
我发现这是由于可执行文件中的require ...造成的。
require 'thor'
require 'fileutils'
require 'gemname/cli'
Cf::CLI.start因为在那里我显式地需要原始的thor。现在,当我将其更改为require 'millisami-thor时,它找不到并显示:
...
custom_require.rb:36:in `require': no such file to load -- millisami-thor (LoadError)
...在Gemfile中,我可以执行gem 'millisami-thor, :require => 'thor',这样它就可以加载派生的gem。但是如果只是require 'millisami-thor',我怎么能做同样的事情呢?
我能想到的唯一选择就是把所有的类名都改成'MillisamiThor‘,而不是'Thor’,还有文件名。但这将是太混乱和丑陋。
如果我之前安装了gem并进行了测试,我就可以发现这一点。但我只是在测试环境中这样做了,在测试环境中,捆绑器需要millisami-thor的thor文件,所以直到今天我才遇到这个问题。
有没有其他方法可以在没有任何混乱的情况下实现这一点?
发布于 2011-07-18 22:12:08
您可以保留原始gem设置,并将Bundler指向您的git存储库分支:
gem 'thor', :git => 'git://github.com/yourname/thor.git', :require => 'thor'或者甚至是本地路径
gem 'thor', :path => '/path/to/thor.git', :require => 'thor'https://stackoverflow.com/questions/6732931
复制相似问题