4

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

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

4

4 回答 4

2

Rubygems 实际上是硬编码到 bundler 中的,我只找到了一种解决方法。

以下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 中省略它,恐怕我们不走运。但是,您可以在项目之间适当地共享它,因此只需将其签入一个位置而不是多个位置。希望这可以帮助!

于 2013-07-29T21:40:18.820 回答
1

我为此制作了一个无依赖的 gem,它模仿 geminabox http post 请求并用 rake release:inabox 覆盖捆绑器 rake 发布

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

于 2014-09-14T17:43:39.573 回答
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

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

于 2014-06-26T13:35:41.110 回答
0

我设法更改了将 gem 上传到 ruby​​gems 的任务,这比 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
于 2018-02-13T19:49:25.740 回答