我正在与一个开发团队合作,我们都在使用我们存储库中的同一个 Gemfile。因为我在 Mac 上工作,而其他人在使用 Ubuntu,所以我们的存储库中有一个 Gemfile.local.example 文件,其中包含每个操作系统的适当通知 gem,所有这些都被注释掉了。
我为我的操作系统取消了 gem 的注释并保存为一个新文件,而不是在版本控制中,Gemfile.local。现在我想“捆绑安装”从两个文件中安装 gems。
我找不到任何关于这样做的好文档。
我正在与一个开发团队合作,我们都在使用我们存储库中的同一个 Gemfile。因为我在 Mac 上工作,而其他人在使用 Ubuntu,所以我们的存储库中有一个 Gemfile.local.example 文件,其中包含每个操作系统的适当通知 gem,所有这些都被注释掉了。
我为我的操作系统取消了 gem 的注释并保存为一个新文件,而不是在版本控制中,Gemfile.local。现在我想“捆绑安装”从两个文件中安装 gems。
我找不到任何关于这样做的好文档。
我同意使用两个 Gemfile 是不好的做法,并且找到了一个解决方案,该解决方案涉及我的 Gemfile 中的RUBY_PLATFORM
常量和platform
标志。这可能不是最优雅的解决方案,但它确实对我有用。
这是我为好奇的读者准备的一段代码:
group :development, :test do
# Mac OSX notifications
gem 'growl_notify' if RUBY_PLATFORM.downcase.include?("darwin")
gem 'growl' if RUBY_PLATFORM.downcase.include?("darwin")
# Gnome notifications => aka for Linux
gem 'libnotify' if RUBY_PLATFORM.downcase.include?("linux")
# Guard-spork doesn't work with windows but it's
# awesome for other Operating Systems.
gem 'guard-spork' if RUBY_PLATFORM.downcase.include?('darwin') || RUBY_PLATFORM.downcase.include?('linux')
# Windows Rubies (RubyInstaller)
platforms :mswin, :mingw do
# Windows notifications
gem 'rb-notifu'
end
end
我不确定跨平台兼容性(看起来它只支持 OS X),但 RVM gemsets 值得研究。我在工作时在我的 Mac 上使用它,效果很好。
RVM 允许我通过运行 rvm use 命令来创建和使用多个 gemset 配置。gem 安装在我当前使用的 gemset 中,因此您不必担心全局 gemset 中的冲突。
你们都应该使用相同Gemfile
的,并且大师Gemfile.lock
也应该在流通。至少这是理想的。
请记住,您可以使用 Ruby 来区分加载哪些部分,Bundle.setup
并且可以使用组来定义仅与特定平台相关的内容。
Gemfile.lock
应该代表如何部署应用程序的特定要求。它应该在版本控制系统中,因此不会混淆应用程序将使用哪个版本启动。如果这里存在平台问题,您应该小心使用什么,并在需要时:development
仅锁定对组的依赖关系。