Bundler用geminabox释放耙子?

有没有办法配置捆绑器,这样当我做rake release它会将gem提交给我自己的gem服务器( 盒子实例中的gem )而不是rubygems?

理想情况下,这个配置可以从我的git存储库中省略。

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:///." 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中省略它,我担心我们运气不好。 但是,您可以在项目之间进行适当的共享,因此只需将其签入一个地方而不是多个地方。 希望这可以帮助!

我为此创建了一个无依赖的gem,它模仿了geminabox http post请求并用rake release覆盖了rake release的捆绑包:inabox

https://github.com/dfherr/geminabox-release

'bundler_geminabox'添加到您的Gemfile:

 group :development do gem 'bundler_geminabox' end 

然后,在你的rakefile中,而不是要求'bundler/gem_tasks'

 require 'bundler_geminabox/gem_tasks' 

您不需要向rakefile添加任何任务; 你将自动获得rake buildrake installrake release ,最后一个上传到~/.gem/geminabox列出的服务器。 否则,该行为与bundler/gem_tasks提供的等效任务相同。

Geith on Github: https : //github.com/joshkrueger/bundler_geminabox

我设法改变了将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