Gemfile中自定义Gem的获取方法及多环境配置问询
嘿,我懂你这种反复修改Gemfile注释的痛苦!每次切换环境都要手动改来改去太麻烦了,给你分享个更优雅的解决方案——用Bundler的条件判断让配置自动适配不同环境,再也不用手动注释啦:
多环境下Gem引用的自动化管理
方案1:针对Rails项目(利用Rails内置环境变量)
直接在Gemfile里通过Rails.env做分支判断,让不同环境自动加载对应的Gem配置:
# 根据运行环境自动选择Gem的加载方式 case Rails.env when 'development', 'test' # 本地开发/测试:指向本地代码目录 gem 'our_gem', path: "../our_gem" when 'qa', 'bamboo' # QA和Bamboo环境:从指定Gem服务器拉取 gem 'our_gem', '0.0.1', source: 'https://gems.website.com' when 'production' # 生产环境:使用本地解压的Gem包 gem 'our_gem', path: "../vendor/gems/our_gem-0.0.1" end
方案2:通用方案(自定义环境变量,非Rails项目也能用)
如果你的项目不是Rails,或者想更灵活地控制,可以自定义环境变量来切换:
# 默认使用开发环境,可通过环境变量GEM_ENV覆盖 gem_env = ENV['GEM_ENV'] || 'development' case gem_env when 'development', 'test' gem 'our_gem', path: "../our_gem" when 'qa', 'bamboo' gem 'our_gem', '0.0.1', source: 'https://gems.website.com' when 'production' gem 'our_gem', path: "../vendor/gems/our_gem-0.0.1" end
使用时只需要在执行bundle install前指定环境变量即可:
# 生产环境安装依赖 GEM_ENV=production bundle install # QA环境安装依赖 GEM_ENV=qa bundle install
实用小贴士
- 记得给这些条件逻辑加上清晰的注释,方便团队里的其他小伙伴理解
- 生产环境的本地Gem包一定要和其他环境的版本保持一致,避免出现莫名其妙的兼容性问题
- 如果团队用geminabox共享Gem,也可以把对应的source配置整合到环境判断里,保持Gemfile的整洁
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

