5

我正在与一个开发团队合作,我们都在使用我们存储库中的同一个 Gemfile。因为我在 Mac 上工作,而其他人在使用 Ubuntu,所以我们的存储库中有一个 Gemfile.local.example 文件,其中包含每个操作系统的适当通知 gem,所有这些都被注释掉了。

我为我的操作系统取消了 gem 的注释并保存为一个新文件,而不是在版本控制中,Gemfile.local。现在我想“捆绑安装”从两个文件中安装 gems。

我找不到任何关于这样做的好文档。

4

4 回答 4

7

为什么不只拥有一个Gemfile并使用诸如之类的东西或使用:platform标志仅在 OS X 上安装一些 gem,而在 Ubuntu 上仅安装其他一些 gem?

拥有两个 Gemfile 似乎很笨拙。如果您真的想这样做,我猜您可以提供 Gemfile 以用于bundle config手册页)。

于 2012-07-19T16:51:59.023 回答
5

我同意使用两个 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
于 2012-07-19T19:16:55.153 回答
1

我不确定跨平台兼容性(看起来它只支持 OS X),但 RVM gemsets 值得研究。我在工作时在我的 Mac 上使用它,效果很好。

RVM 允许我通过运行 rvm use 命令来创建和使用多个 gemset 配置。gem 安装在我当前使用的 gemset 中,因此您不必担心全局 gemset 中的冲突。

https://rvm.io//

于 2012-07-19T17:30:13.560 回答
0

你们都应该使用相同Gemfile的,并且大师Gemfile.lock也应该在流通。至少这是理想的。

请记住,您可以使用 Ruby 来区分加载哪些部分,Bundle.setup并且可以使用组来定义仅与特定平台相关的内容。

Gemfile.lock应该代表如何部署应用程序的特定要求。它应该在版本控制系统中,因此不会混淆应用程序将使用哪个版本启动。如果这里存在平台问题,您应该小心使用什么,并在需要时:development仅锁定对组的依赖关系。

于 2012-07-19T16:52:44.777 回答