首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取forked gem lib文件?名称冲突?

如何获取forked gem lib文件?名称冲突?
EN

Stack Overflow用户
提问于 2011-07-18 20:34:42
回答 1查看 278关注 0票数 0

我不得不派生gem Thor,因为我的cli有一个命令run,它保留在雷神库中,在.gemspec中将其名称改为.gemspec

代码语言:javascript
复制
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.gemgem build gemname.gemspec构建gem,并用gem install gemname.gem安装它,它也会被安装和二进制文件。很好,直到这里。

现在,当我使用像executable --params这样的二进制命令时,它会查找原始的thor库而不是派生的库。

我发现这是由于可执行文件中的require ...造成的。

代码语言:javascript
复制
require 'thor'
require 'fileutils'

require 'gemname/cli'

Cf::CLI.start

因为在那里我显式地需要原始的thor。现在,当我将其更改为require 'millisami-thor时,它找不到并显示:

代码语言:javascript
复制
...
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-thorthor文件,所以直到今天我才遇到这个问题。

有没有其他方法可以在没有任何混乱的情况下实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2011-07-18 22:12:08

您可以保留原始gem设置,并将Bundler指向您的git存储库分支:

代码语言:javascript
复制
gem 'thor', :git => 'git://github.com/yourname/thor.git', :require => 'thor'

或者甚至是本地路径

代码语言:javascript
复制
gem 'thor', :path => '/path/to/thor.git', :require => 'thor'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6732931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档