2012-07-19 8 views
5

私は開発者のチームと一緒に作業しており、私たちはすべて同じリポジトリのGemfileを使用しています。私はMacで作業していて、他の人はUbuntuを使用しているので、リポジトリにはGemfile.local.exampleファイルがあり、コメントされた各OSの適切な通知宝石があります。アプリケーションに複数のGemファイルを使用するにはどうすればよいですか?

私のOS用の宝石のコメントを解除し、バージョンコントロールのGemfile.localではなく、新しいファイルとして保存しました。今私は両方のファイルから宝石をインストールする "バンドルインストール"したいと思います。

これについては、適切な文書が見つかりません。

+2

http://stackoverflow.com/questions/7962743/bundler-load-multiple-gemfilesの可能性のある重複 – Conner

答えて

5

私は2つの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

なぜちょうど1 Gemfileを持っているとgroupsのようなものを使用するかだけのUbuntu上でいくつかのOS X上の宝石などをインストールする:platformフラグを使用していませんか?

2つのGemファイルを扱いにくいようです。 が本当にとしたい場合は、bundle configman page)に使用するGemfileを指定することができます。

+0

これは私がいた、素晴らしいですプラットフォームオプションを認識していません。私はRUBY_PLATFORM定数を持つGemfileで条件文を使用していました。とても清潔です! –

+0

':platform'フラグを使用するのが最も洗練された解決策ですが、 'platform:mswin、:mingw'はWindowsを参照していますが、 'platform:ruby'はOSXとUbuntuを参照しているようです。私はOSXとUbuntuの間で指定する必要があります。 [このページ](http://yopefonic.wordpress.com/2011/06/23/multi-platform-ruby-development-with-bundler/)は、RUBY_PLATFORM定数の使用を提案しています。別の方法がありますか? – dudeitsdevin90

0

同じGemfileを使用し、マスターGemfile.lockも同様に使用する必要があります。少なくともこれが理想です。

Rubyを使用してロードするセクションをBundle.setupで区別することができ、グループを使用して特定のプラットフォームにのみ関連するものを定義することができます。

Gemfile.lockは、アプリケーションの展開方法の具体的な要件を示す必要があります。それはバージョンコントロールシステムにあるはずだから、アプリケーションがどのバージョンで起動するのか混乱することはありません。ここにプラットフォームの問題がある場合は、使用するものを慎重に、必要な場合は依存関係を:developmentグループのみにロックする必要があります。

1

クロスプラットフォームの互換性についてはわかりませんが(OS Xのみがサポートされているようです)、RVMのgemsetは検討する価値があります。私は仕事で私のマックでこれを使用し、それは美しく動作します。

RVMでは、rvm useコマンドを実行することによって、複数のgemset構成を作成して使用することができます。宝石は私が現在使用している宝石セットにインストールされているので、グローバル宝石セットの競合について心配する必要はありません。

https://rvm.io//

関連する問題