2012-07-19 54 views
5

我正在和一个开发团队合作,我们都使用了我们仓库中的相同Gemfile。因为我在Mac上工作,而其他人使用的是Ubuntu,所以我们的存储库中还有一个Gemfile.local.example文件,它为每个操作系统都提供了适当的通知宝石,所有这些文件都被注释掉了。如何为我的应用程序使用多个Gemfiles?

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

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

+2

http://stackoverflow.com/questions/7962743/bundler-load-multiple-gemfiles – Conner 2012-07-19 16:50:09

回答

5

我同意使用两个Gemfiles是不好的做法,并已发现包括在我的Gemfile的platform标志沿RUBY_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 
7

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

似乎很笨拙,有两个Gemfiles。你可以提供Gemfile使用bundle configman page)如果你真的想要这样做,我猜。

+0

这是真棒的可能的复制,我是不知道平台选项。我一直在使用RUBY_PLATFORM常量在Gemfile中使用条件。非常干净! – 2012-07-19 16:55:42

+0

使用':platform'标志似乎是最优雅的解决方案,但'platform:ruby'引用OSX和Ubuntu,而'platform:mswin,:mingw'引用Windows。我需要在OSX和Ubuntu之间指定。 [本页](http://yopefonic.wordpress.com/2011/06/23/multi-platform-ruby-development-with-bundler/)建议使用RUBY_PLATFORM常量。有另一种方法吗? – dudeitsdevin90 2012-07-19 18:40:52

0

你应该都使用相同的Gemfile和主Gemfile.lock也应该循环。至少这是理想的。

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

Gemfile.lock应代表部署应用程序的具体要求。它应该在版本控制系统中,所以应用程序将会启动的版本不会混淆。如果此处存在平台问题,则应注意您使用的内容,并根据需要将相关性锁定到:development组。

1

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

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

https://rvm.io//

相关问题