2014/06/03(火) [n年前の日記]
#4 [ruby] bundlerについて勉強
Ruby のライブラリをインストールする際、RubyGems なる仕組みが ―― gem というコマンドが使えるわけですけど。Ruby 1.9.3 上で、cairo、glib2、gdk_pixbuf2、rsvg2 のバージョンを決め打ちしてインストールする作業が面倒臭かったので、bundler なる仕組みを使えないものかなと思って調べ始めたり。
とりあえず、bundler をインストール。
雛形ファイルを作る。
以下のような感じに修正してみたけど…。
あらかじめ、cairo、glib2、gdk_pixbuf2、rsvg2 を、gem uninstall xxxx でアンインストールしておいた上で、以下を実行。
ただ、この指定だと、Rubyのシステム部分?に、ライブラリをインストールしてしまう。今回はシステムにインストールしたかったので、コレでいいのだろうけど。フツーはプロジェクト単位で、どのライブラリを使うのか、分けて管理するらしくて。一般的には、プロジェクトフォルダ/vendor/bundle 以下にインストールする。らしい。たぶん。
それはともかく。一つの Gemfile の中で、
こんな感じではどうかしら。
とりあえず、bundler をインストール。
gem install bundler
雛形ファイルを作る。
bundle initGemfile というファイルが、カレントフォルダに作られた。エディタで開く。
以下のような感じに修正してみたけど…。
source "https://rubygems.org" platforms :mingw_19 do gem "cairo", "1.12.4" gem "glib2", "1.2.6" gem "gdk_pixbuf2", "1.2.6" gem "rsvg2", "1.2.6" end # platforms :mingw_20 do # gem "cairo" # gem "glib2" # gem "gdk_pixbuf2" # gem "rsvg2" # endplatforms :mingw_19 do 〜 end で、「Ruby 1.9 mingw32版なら、このライブラリをインストールせよ」と指定をしている、らしい。よく分かってないですが。ちなみに、 _Gemfile(5) - A format for describing gem dependencies for Ruby programs の、PLATFORMS (:platforms) のところに、記述できる種類の一覧があるようで。
あらかじめ、cairo、glib2、gdk_pixbuf2、rsvg2 を、gem uninstall xxxx でアンインストールしておいた上で、以下を実行。
bundle installこれで、バージョン決め打ちでインストール出来たように見えた。
ただ、この指定だと、Rubyのシステム部分?に、ライブラリをインストールしてしまう。今回はシステムにインストールしたかったので、コレでいいのだろうけど。フツーはプロジェクト単位で、どのライブラリを使うのか、分けて管理するらしくて。一般的には、プロジェクトフォルダ/vendor/bundle 以下にインストールする。らしい。たぶん。
bundle install --path vendor/bundleしかし、このままだと、スクリプト内で require 'hoge' とかしても「ライブラリがねえよ」と言われてしまう。…どうすれば使えるようになるのかは、まだ調べてないです。
それはともかく。一つの Gemfile の中で、
- 「Ruby 1.9 mingw32版なら、このバージョンのライブラリをインストールせよ」
- 「Ruby 2.0 mingw32版なら、最新版のライブラリをインストールせよ」
You cannot specify the same gem twice with different version requirements. You specified: cairo (= 1.12.4) and cairo (>= 0)さて、どう書けばいいんだろう…。
こんな感じではどうかしら。
source "https://rubygems.org" platforms :mingw do if RUBY_VERSION =~ /^1.9/ gem "cairo", "1.12.4" gem "glib2", "1.2.6" gem "gdk_pixbuf2", "1.2.6" gem "rsvg2", "1.2.6" else gem "cairo" gem "glib2" gem "gdk_pixbuf2" gem "rsvg2" end endコレで合ってるのかな…? よくわからん…。
[ ツッコむ ]
以上です。