有没有办法配置bundle,这样当我rake release
时,它会将gem提交给我自己的gem服务器(gem in a box实例)而不是rubygems?
理想情况下,我可以从我的git存储库中省略此配置。
答案 0 :(得分:2)
Rubygems实际上是硬编码到捆绑器中的,我发现只有一种方法。
以下monkeypatch应该可以满足您的需求:
module Bundler
class GemHelper
protected
def rubygem_push(path)
if Pathname.new("~/.gem/nexus").expand_path.exist?
sh("gem nexus '#{path}'")
Bundler.ui.confirm "Pushed #{name} #{version} to https://<your-url-here>/."
else
raise "Your Nexus credentials aren't set. Run `gem nexus #{path}` to push your gem and set credentials."
end
end
end
end
以上是针对Nexus而不是Geminabox,但这个概念应适用于其中之一。
至于从git中省略它,我担心我们运气不好。但是,您可以在项目之间进行适当的共享,因此只需将其签入一个地方而不是多个地方。希望这有帮助!
答案 1 :(得分:1)
我为此创建了一个依赖免费的gem,它模仿了geminabox http post请求并用rake release覆盖了rake release的捆绑包:inabox
答案 2 :(得分:0)
将'bundler_geminabox'
添加到您的Gemfile:
group :development do
gem 'bundler_geminabox'
end
然后,在你的rakefile中,而不是要求'bundler/gem_tasks'
:
require 'bundler_geminabox/gem_tasks'
您不需要向rakefile添加任何任务;您将自动获得rake build
,rake install
和rake release
,其中最后一个上传到~/.gem/geminabox
中列出的服务器。否则,该行为与bundler/gem_tasks
提供的等效任务相同。
答案 3 :(得分:0)
我设法改变了将gem上传到rubygems的任务,这比JohnIV提供的解决方案更具侵入性,尽管概念是相同的。
Rake::Task['release:rubygem_push'].clear
namespace :release do
task :rubygem_push do
version = ModuleName::VERSION
name = 'module_name'
cmd = "gem nexus pkg/#{name}-#{version}.gem"
puts `#{cmd} 2>&1`
end
end