rbenvとrbenv-gemsetでgemをよろしく管理する
同じgemでもアプリによって依存するバージョンが違ったりする場合やちょっと試したい場合に、rbenv-gemsetをつかって、gemsetを分けておくと便利。
例えば、bundlerとかpryとか共通に使うgemは、globalと名付けたgemsetにして、railsとかsinatraとかのgemはアプリごとにgemsetを作るとはかどる。
まず下のようにglobalなgemsetを作る。 当然ながら、gemsetはrubyのバージョンごとに作る決まり。
$ rbenv gemset create 2.0.0-p247 global
作ったgemsetを確認
$ rbenv gemset list 2.0.0-p247: global
現在有効なgemsetを確認する
$ rbenv gemset active global
globalが印字されれば,上で作ったglobal用のgemsetが有効となっているので、bundlerとかをインストールすればよいと。
次にアプリ用のgemsetをつくり、存在するgemsetを確認。
$ rbenv gemset create 2.0.0-p247 example reated example for 2.0.0-p247 $ rbenv gemset list 2.0.0-p247: example global
でもこの時点でactiveなのはglobalのみである。
$ rbenv gemset active global
共通用途として作ったglobal gemsetとアプリ固有の者として作ったexample gemsetの両方を使うようにするためには、アプリのルートディレクトリに.rbenv-gemsetsファイルを作り、そのなかに「exmaple global」と記載すればOK。 そうすることで、exampleディレクトリにいるときだけexample gemsetが有効になる。
$ cd example/ $ echo example global > .rbenv-gemsets $ cat .rbenv-gemsets example global $ rbenv gemset active example global
gem envで確認するとexample,globalがGEM PATHSに設定されている。
- GEM PATHS: - /Users/hoge/.rbenv/versions/2.0.0-p247/gemsets/example - /Users/hoge/.rbenv/versions/2.0.0-p247/gemsets/global
gemをinstallするとexmaple gemsetにinstallされ、globalを汚さない。
$ bundle init Writing new Gemfile to /Users/salza/Documents/ruby-works/example/Gemfile $ echo gem \"mechanize\" >> Gemfile $ cat Gemfile # A sample Gemfile source "https://rubygems.org" # gem "rails" gem "mechanize" $ bundle install Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/.. Resolving dependencies... Installing unf_ext (0.0.6) Installing unf (0.1.2) Installing domain_name (0.5.13) Installing http-cookie (1.0.1) Installing mime-types (1.25) Installing net-http-digest_auth (1.4) Installing net-http-persistent (2.9) Installing mini_portile (0.5.1) Installing nokogiri (1.6.0) Installing ntlm-http (0.1.1) Installing webrobots (0.1.1) Installing mechanize (2.7.2) Using bundler (1.3.5) $ gem list -l *** LOCAL GEMS *** bigdecimal (1.2.0) bundler (1.3.5) coderay (1.0.9) domain_name (0.5.13) http-cookie (1.0.1) io-console (0.4.2) json (1.7.7) mechanize (2.7.2) method_source (0.8.2) mime-types (1.25) mini_portile (0.5.1) minitest (4.3.2) net-http-digest_auth (1.4) net-http-persistent (2.9) nokogiri (1.6.0) ntlm-http (0.1.1) pry (0.9.12.2) psych (2.0.0) rake (0.9.6) rdoc (4.0.0) slop (3.4.6) test-unit (2.0.0.0) unf (0.1.2) unf_ext (0.0.6) webrobots (0.1.1)
でexampleディレクトリの外でgemの状態を確認すると、globalを汚してないことが確認できる。
$ cd .. $ gem list -l *** LOCAL GEMS *** bigdecimal (1.2.0) bundler (1.3.5) coderay (1.0.9) io-console (0.4.2) json (1.7.7) method_source (0.8.2) minitest (4.3.2) pry (0.9.12.2) psych (2.0.0) rake (0.9.6) rdoc (4.0.0) slop (3.4.6) test-unit (2.0.0.0)
という感じに便利だなと。