如何在我的应用程序中使用多个Gemfiles?

时间:2012-07-19 16:46:11

标签: ruby-on-rails ruby bundler gemfile

我正在与一组开发人员合作,我们都在使用我们存储库中的相同Gemfile。因为我在Mac上工作,而其他人正在使用Ubuntu,我们在我们的存储库中也有一个Gemfile.local.example文件,每个操作系统都有相应的通知宝石,所有这些都被注释掉了。

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

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

4 个答案:

答案 0 :(得分:7)

为什么不只有一个Gemfile并使用groups之类的东西或使用:platform标志只在OS X上安装一些宝石而在Ubuntu上安装其他宝石?

拥有两个Gemfiles似乎相当笨拙。如果确实希望这样做,我可以提供用于bundle configman page)的Gem文件。我想。

答案 1 :(得分:5)

我同意使用两个Gemfiles是不好的做法,并且找到了一个解决方案,其中包含RUBY_PLATFORM常量以及我的Gemfile中的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

答案 2 :(得分:1)

我不确定跨平台的兼容性(看起来它只支持OS X),但RVM gemsets值得研究。我在工作中使用它,它工作得非常漂亮。

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

https://rvm.io//

答案 3 :(得分:0)

你们都应该使用相同的Gemfile,并且主人Gemfile.lock也应该流传。至少这是理想的。

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

Gemfile.lock应代表应用程序部署方式的具体要求。它应该在版本控制系统中,因此不会混淆应用程序将启动的版本。如果此处存在平台问题,您应该小心使用的内容,并在必要时锁定仅:development组的依赖关系。