Bundler用geminabox发布的佣金?

时间:2013-02-11 13:18:53

标签: ruby rake bundler

有没有办法配置bundle,这样当我rake release时,它会将gem提交给我自己的gem服务器(gem in a box实例)而不是rubygems?

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

4 个答案:

答案 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

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

答案 2 :(得分:0)

'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提供的等效任务相同。

Github上的宝石:https://github.com/joshkrueger/bundler_geminabox

答案 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