覆盖Bundler的发布,但没有把它放在gem中

时间:2013-07-10 08:31:12

标签: ruby bundler geminabox

我正在使用bundler来管理我的gem的依赖项,而且我正在使用geminabox来托管我的宝石。使用bundler的rake release是个坏消息,因为我的宝石会转到rubygems而不是geminabox,但是从该任务中获得额外的功能(推送标签等)确实很有帮助。

我写了一个宝石,它增加了rake release geminaboxrake release rubygems的能力,但现在我的库(与geminabox无关)取决于这个捆绑/ geminabox的东西,而这依赖于geminabox,还有sinatra,rack ......突然之间我的开发需求很大,只针对我的开发情况。其中一些宝石将公开发布,这些geminabox开发依赖性对其他任何人都不是必需的。

我意识到将一个gem注入一个bundle gemite特别是Bundler打算阻止的东西,那么你会推荐什么样的方法让我自己的自定义发布功能与gem本身无关?

1 个答案:

答案 0 :(得分:0)

我已经在我的gem的Rakefiles中重新定义了默认的Bundler发布任务。你是对的,你不想吮吸Sinatra和一个臃肿的堆栈。

你有两个选择......

  1. 编写自定义rake任务,从头开始执行您需要的一切
  2. 重新定义Bundler的默认发布任务,因为这是您想要表现不同的唯一一点。
  3. Rake文件

    require "bundler/gem_tasks"
    
    Rake::TaskManager.class_eval do
      def remove_task(task_name)
        @tasks.delete(task_name.to_s)
      end
    end
    def remove_task(task_name)
      Rake.application.remove_task(task_name)
    end
    
    remove_task :release # So we don't publish to rubygems.org
    desc "release to geminabox"
    task :release => [:build] do |t|
      system "gem inabox"
    end