2012-07-19 50 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//

相關問題