Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 获取gem文件中gem的自定义方法_Ruby_Rubygems_Gemfile - Fatal编程技术网

Ruby 获取gem文件中gem的自定义方法

Ruby 获取gem文件中gem的自定义方法,ruby,rubygems,gemfile,Ruby,Rubygems,Gemfile,当我们使用自定义Gem构建应用程序时,我们必须不断修改Gem文件,以指向我们的本地代码、共享服务器(使用geminabox),或者在生产中使用Gem解包版本(因为我们的Gem服务器受vpn保护) 这意味着我们的GEM文件中有如下代码: # QA and Bamboo gem 'our_gem', '0.0.1', source: 'https://gems.website.com' # Development, Test #gem 'our_gem', path: "../our_gem" #

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

这意味着我们的GEM文件中有如下代码:

# 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"
我们的开发人员必须不断地对每一行进行注释和取消注释,然后才能推动在竹子上构建分支,等等

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

custom_gem 'our_gem', '0.1.1'
代替gem文件中的
gem
声明

这将是:

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

问题是。。。您可以在一个文件中使用这样的自定义方法吗?如果是这样的话,这些代码在应用程序中的位置是什么。或者我们必须使用类似于:

难道你不能直接使用吗?@SergioTulentsev如果我们使用组,我们必须确保捆绑安装被设置为排除其他安装。这将是更多的代码和不太干净。评论方法会更有效。我们正在寻找的是一种纯粹使用环境来指定gem安装的方法。@Cameron但这正是团队的目标,例如
gem-our_-gem,“0.0.1”,来源:'https://gems.website.com,组:[:qa,:bambol]
gem-our\u-gem,路径:“../our\u-gem”,组:[:开发,:测试]
@engineersmnky是的,但我们希望基于环境安装,而不是基于环境安装。如果我们使用组,我们就必须进行
bundle安装,而不必为我们的开发进行生产性安装。我只是想知道,如果我们能按照相反的方式进行调整,我们是否可以建造一些更容易的东西。我们确实在CI服务器上使用该命令来排除开发和测试gem,但这是自动化的,因为我们的团队正在使用终端,等等,为了完成绑定,他们必须记住排除或设置别名,因此他们选择了注释方法。如果Bundler支持类似组的内容,从而根据其环境安装gem,而不是手动排除其他组中的gem,那就更好了。这基本上就是我们想要看到的,我们是否能够实现。