0

这是我的问题:Warbler 不支持通过 gemfile 中的路径包含的 gem。然而,我需要为我的工作这样做。重要的是,将包含的 gem 打包并作为战争档案中的简单 ruby​​gem 处理。到目前为止,我一直试图操纵捆绑器,因此当规范到达 warbler/traits/bundler.rb 时(这是规范打包到存档的地方),它已经有 'Bundler::Source::Rubygems' 作为源。问题是它需要从路径构建和安装,但我无法处理它以在规范或源代码中的任何位置传递路径。它已经可以将 gem 构建、安装并作为 ruby​​gem 打包到存档中,并在 Lockfile 中的 GEM 下列出,但只有错误的编码(所有这些都参考了特定的 gem,并且路径输入清楚)

这是我的代码:

莺/lib/warbler/traits/bunlder.rb 行:60

case spec.source
          when ::Bundler::Source::Git
            config.bundler[:git_specs] ||= []
            config.bundler[:git_specs] << spec
          when ::Bundler::Source::Path
            $stderr.puts("warning: Bundler `path' components are not currently   supported.",
                         "The `#{spec.full_name}' component was not bundled.",
                         "Your application may fail to boot!")
          else

#####################################################################  MINE
            if spec.name == "charla_common" 
             path = ::Bundler::GemHelper.new("../../common/trunk", spec.name).install_gem
            end
##################################################################### MINE END
            config.gems << spec
          end

这是 gem 的安装路径

Bundler/lib/bundle/dsl.rb 行:120

def source(source, options = {})

############################################################### MINE
      if source.class == Bundler::Source::Path
        options[:path] = source.options["path"]
        source = "https://rubygems.org"
      end
############################################################### MINE END
      case source
      when :gemcutter, :rubygems, :rubyforge then
        Bundler.ui.warn "The source :#{source} is deprecated because HTTP " \
          "requests are insecure.\nPlease change your source to 'https://" \
          "rubygems.org' if possible, or 'http://rubygems.org' if not."
        @rubygems_source.add_remote "http://rubygems.org"
        return
      when String
        # ensures that the source in the lockfile is shown only once
        unless options[:prepend] 
          @rubygems_source.add_remiote source
        end
        return
      else
        @source = source
        if options[:prepend]
          @sources = [@source] | @sources
        else
          @sources = @sources | [@source]
        end

        yield if block_given?
        return @source
      end
    ensure
      @source = nil
    end
4

1 回答 1

0

我不确定这是否适合您,但为了解决这个问题,我在供应商/缓存中创建符号链接到包含 gem 的路径。

例如vendor/cache/gem_name -> ../../../gem_name

于 2014-01-28T13:48:29.023 回答