首页 > 解决方案 > 在 Gemfile 中获取 gem 的自定义方法

问题描述

当我们使用自定义 Gem 构建应用程序时,我们必须不断修改 Gemfile 以指向我们的本地代码、我们的共享服务器(使用 geminabox),或者在生产中我们使用解压的 gem 版本(作为我们的gem 服务器受 vpn 保护)。

这意味着我们的 gemfile 中有这样的代码:

# QA and Bamboo
gem 'our_gem', '0.0.1', source: 'https://gems.website.com'
# Development, Test
#gem 'our_gem', path: "../our_gem"
# Production
#gem 'our_gem', path: "../vendor/gems/our_gem-0.1.1"

我们的开发人员必须在他们推送到分支以在 Bamboo 上构建之前,不断地评论和取消评论每一行,等等。

一个建议是用一种自定义方法替换它,例如:

custom_gem 'our_gem', '0.1.1'

代替gemGemfile 中的声明。

这将是:

def custom_gem(name, version = '0.0.1')
  case Rails.env
  when qa?, :bamboo?
    gem name, version, source: 'https://gems.website.com'
  when development?, test?
    gem name, path: "../#{name}"
  when production?
    gem name, path: "../vendor/gems/#{name}-#{version}"
  else
    fail "Unknown environment for gem: #{name}"
  end
end

问题是......你可以在 Gemfile 中使用这样的自定义方法吗?如果是这样,该代码将存在于应用程序中的什么位置。或者我们是否不得不求助于使用类似的东西: http: //bundler.io/man/gemfile.5.html#INSTALL_IF

标签: rubyrubygemsgemfile

解决方案


推荐阅读