金曜日, 6月 07, 2013

Couchbase Client Library Ruby 1.3.1のインストール(失敗そして後日談へ)

ruby経験1時間未満の僕がCouchbaseをrubyで使おうとしているんだけど、インストールは正常にできた、と思う。

けど使うところで「can't modify frozen string (RuntimeError)」なんつーエラーが出てだめ。

とりあえずRuby 1.9.3は全然だめで、recommendedな1.9.2を使うとなにかしらで引っかかっている感じ。長年の経験からはruby clientがアレだと思って、CouchbaseのForumのぞいたら、なんと昨日clientが新しくなって1.3.1になってるw さっそくupdateして試した!

けど同じエラーorz

困ったけどとりあえずインストール方法だけでも、自分のために残しときますね!



■Couchbase Client Library Ruby 1.3.1のインストール
※RHEL5.5 64bitで実施。たぶんほかの5系64bitならまんまでおk。

[参照ページ]
http://www.couchbase.com/jp/develop/ruby/current
https://rubygems.org/gems/couchbase/versions/1.3.1
http://www.slideshare.net/avsej/getting-started-with-couchbase-ruby

[epelのインストール]
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

[libevのインストール]
yum install -y --enablerepo=epel libev

[couchbaseライブラリのインストール]
wget -O/etc/yum.repos.d/couchbase.repo http://packages.couchbase.com/rpm/couchbase-centos55-x86_64.repo
yum install -y  libcouchbase2 libcouchbase-devel

[couchbase Ruby Client Libraryのインストール]
gem install couchbase

[確認とだめなところ]
$ ruby -rrubygems -rcouchbase -e 'puts Couchbase::VERSION'
/usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:191:in `strip!': can't modify frozen string (RuntimeError)
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:191:in `initialize'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/ext/multi_json_fix.rb:35:in `new'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/ext/multi_json_fix.rb:35:in `<top (required)>'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/couchbase/transcoder.rb:19:in `<top (required)>'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/couchbase.rb:21:in `<top (required)>'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
$


後日談!(笑)


Clientがruby 1.8.7もサポートしているので、そっちを試してみる・・・

# rbenv global 1.8.7-p371
# rbenv rehash
実行
# ruby -rrubygems -rcouchbase -e 'puts Couchbase::VERSION'
ruby: no such file to load -- couchbase (LoadError)
#
ファイルが読めないらしい・・・たぶんパスだろ・・・


モジュールをフルパスで書いてあげてみると・・・
#
# ruby -rrubygems -r /usr/local/rbenv/versions/1.8.7-p371/lib/ruby/gems/1.8/gems/couchbase-1.3.1/lib/couchbase -e 'puts Couchbase::VERSION'
[WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance.
1.3.1

#

お?! 変なエラーも出てるけど・・・イッた・・・(ヘブン


MultiJsonのエラーはyajl-rubyを入れてあげて・・・
gem install yajl-ruby
rbenv rehash

今度はパスに移動してから実行すると
# cd /usr/local/rbenv/versions/1.8.7-p371/lib/ruby/gems/1.8/gems/couchbase-1.3.1/lib
#
# ruby -rrubygems -rcouchbase -e 'puts Couchbase::VERSION'
1.3.1
#
出たー!
そっかー、パスかー。てことで.bashrcにパスを直書きしてみた → けどだめだった。
1.9.2でパスを指定してみた → けどだめだった。1.9.2は後回しにする。

rbenvはどっかでパスを指定するのか? ってことでさらに続く。


後後日談!

1行をやめて、普通に書いてみたらどうなるかやってみた。

ver.rb
---
require 'rubygems'
require 'couchbase' 
puts Couchbase::VERSION
---

実行する
$ ruby ver.rb
1.3.1$

普通に使えた・・・。 1行で出せなかったのはなんだったんだ・・・。つまり、pathなどは大丈夫?で、単に1行でやるのがだめなんだ、という結論にしてみる(が、識者の方がいれば教えてくださいorz)。


Couchbase Client Library Rubyを使うときのまとめ for 自分!

・rubyのバージョンは、1.8.7-p371を使う
・バージョンを1行で表示させるテストはあきらめるw

以上!