[ruby][rails]rails3でconsoleしようとしたらno such file to load -- readline (LoadError)

いつものようにUbunturailsしていて『rails console』ってやったら

no such file to load -- readline (LoadError)

という感じに怒られました。



結論を言えば参考URLに書いてある通りなんですが、rubyをインストールする時にreadlineのdevelopmentパッケージをいれておかなければならなかったみたいですね。
参考URLでは『readline-devel』となっていますが、debian系だと相変わらずパッケージ名が違うみたいなので注意。


以下、やったこと。

sudo aptitude install libreadline6-dev

『libreadline-dev』『libreadline5-dev』『libreadline6-dev』というのがありましたが、とりあえず『libreadline6-dev』にしてみました。こういう時に数字がついてない『libreadline-dev』を入れたらどのバージョンが入るのだろうか・・・。

$ cd .rvm/src/ruby-1.9.2-p0/ext/readline/
$ ruby extconf.rb
$ make
$ make install

って感じでおk。
後はrailsプロジェクトのルートディレクトリに行って『rails console』ってやったらちゃんと動きました。よかったよかった。

Ruby1.9.2でLoadErrorが出たら

Ruby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった - ぬいぐるみライフ?

上記エントリでのタイトルにもなっている件についての話。


Rubyリファレンスマニュアルの『$LOAD_PATH』の項にも書いてあるように、

起動時には、-I directory オプションで指定したディレクトリ、環境変数 RUBYLIB の値、コンパイル時に指定したデフォルト値、"." (カレントディレクトリ) を含みます。

がデフォルトのLOAD_PATHの値になってますが、Ruby1.9.2からカレントディレクトリは抜けるようになったっぽいです。


上記エントリでは"require_relative"を使った解決法が書かれていますが、やっぱり後方互換性などの点から、実行したいrubyスクリプトがあるディレクトリをLOAD_PATHに追加するのがいいかなと思いました。


で、LOAD_PATHに追加しようとしたんだけど、LOAD_PATHへの追加のしかたがイマイチわからず、結局"RUBYLIB"に追加しちゃいました。
例えば、"project_hoge"フォルダの中に自分で書いたrubyスクリプトがたくさん入ってたとしたら、".bashrc"を開いて

RUBYLIB=$HOME/work/ruby/project_hoge
export RUBYLIB

みたいに追加すればおkです。


すぐに反映したいときは

source ~/.bashrc

もお忘れなく。

$ ruby -e 'puts $:'

として、さっき.bashrcに指定した値が表示されてれば成功。


しかし、これからrubyでプログラム作るとき、いちいちそのアプリケーションのルートフォルダをRUBYLIBに追加していくのも面倒だしなぁ。何か良い方法はないものかしら。

展開のしかた


またもや初歩的なことを今更。。。

tar.gzは

tar zxvf file.tar.gz

で展開。

tar.bz2は

tar jxvf file.tar.bz2

で展開。


xvfがtar形式のファイルを展開するオプションで、zはgz、jはbz2を指すオプション。


ちなみに圧縮はするときのオプションはcvfなので、tar.gz形式で圧縮したい場合は、

tar zcvf compress.tar.gz <file_path>

tar.bz2形式で圧縮したい場合は、

tar jcvf compress.tar.bz2 <file_path>

でおk。

libxml-rubyのインストール


引き続き、libxml-rubyのインストール。

rubyにはREXMLというXMLライブラリが標準で付いてきますが、これが遅いというのは有名な話で、代替手段としてlibxml-rubyがよく使われます。
というわけで、これもインストール。ちょっとめんどいんだけど、結論からいうと以下のとおりのコマンドで入りました。

$ sudo aptitude install libxml2
$ sudo aptitude install libxml2-dev
$ gem install -r libxml-ruby

gem installの"-r"というオプションはリモートリポジトリ(rubyforgeのことらしい)からのみインストールというオプションらしい。どうやらgemでインストールするときは"-r"を付けたほうがよさそう。ローカルリポジトリに古いのがあると、それをインストールしちゃうとか。。。gemもあんま詳しくないので、もうちょっと勉強しなきゃなぁ。


Ruby1.9系にうつって、rubyの処理系自体が速くなってるはずだら、REXMLも速くなってるんじゃないかという推測も立ちますね。
できればベンチマークもとってみたいと思いますが、それはまた次回。

【続】Ubuntu10.04(Server版)にrails3をインストール - scaffoldが成功するまで


昨日の作業(Ubuntu 10.04 (Server版) に ruby1.9.2とrails3.0をインストール - f_world21の日記)の続き。


とりあえずrailsが動いたってだけじゃなく、ちゃんとDBにModelを生成するまでやってみたので、そのメモ。

$ rails generate scaffold product title:string description:text image_url:string

scaffoldはこんな感じ。

$ rake db:migrate
$ rails server

とやってみたら

no such file to load -- openssl

というエラーがでちゃいました。あー、そういえば確かopenssl必要だったなぁと思い

$ sudo aptitude install libopenssl-ruby

とやってみたんですが、相変わらず『no such file to load -- openssl』のエラーは消えず。
調べてみたら、zlibの時にやったようにopenssl関連をもう一回makeしなおさなきゃいけないみたい。あれ、昔ruby1.8系とrails2.3系をインストールしたときこんなこと下覚えはなかったのだが。。。まぁいいや、やってみましょう。

$ cd .rvm/src/ruby-1.9.2-p0/ext/openssl/
$ ruby extconf.rb
$ make

あれ、makeがうまくいきません。makeするものがありません的に言われちゃいました。
これまた調べてみると、openssl、libssl-dev(debian系の場合)というパッケージも必要で、それをいれたあとにmake擦る必要があるみたい。あれ、以前はこんなことやってなかったのになぁ。ただ、以前はデスクトップ版のubuntuにインストールしたし、apacheとかも入れた後にrubyrailsインストールしたから、おそらく事前に入っていたのでしょう。
まぁ、なにはともあれ試してみましょう。

$ sudo aptitude install openssl
$ sudo aptitude install libssl-dev

これやってもう一回make試してみましょう。

$ ruby extconf.rb
$ make
$ make install

うまくmakeできました。これでやっとサーバを起動できます。

$ rails s

rails server』コマンドは上記のように省略可能みたいです。他にもアルファベット一文字で省略できるのおおそうですね。

Ubuntu 10.04 (Server版) に ruby1.9.2とrails3.0をインストール

タイトルの通り、ubuntuに現時点(2010/10/4)の最新版のrubyrailsをインストールした際のメモです。

今回はserver版のubuntuで、特に何も入ってないので、まずはrubyのインストールから。
現時点の最新はruby1.9.2。
aptitudeでは入らないので、ソースからダウンロードしてコンパイルするかー・・・、って思ってたら、なんと最近はrvmというのがあるらしいじゃないですか。

rvmとは『Ruby Version Manager』の略で、rubyインタプリタ本体の管理用アプリケーションだとな。これを使うと、複数のバージョンのrubyインタプリタを共存させることができるとか。
インストールされたrubyは『~/.rvm/rubies/』以下に入る。その他、gemも同じような場所にまとめて保存されるらしく、ホームディレクトリ以下にインストールされるので、インストールするときに、いちいしsudoしなくてもよくなります。まだよくわかてないけど、とにかくよさそうなので、rvm経由で1.9.2を入れます。そのためには、まず普通に現行のrubyをいれて、そこからrvmのインストールをできるようにします。


rvmについてはリンクをどうぞ。
All about Ruby on Rails & Data recovery software

$ sudo aptitude install ruby
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]

これで1.8.7のrubyがはいりましたね。
次はrubygems。前はaptitudeではうまく入らず、ソースをダウンロードしてsetup.rbを起動してましたが、最近ではaptitudeでも問題ないみたいなんで、aptitudeで。

$ sudo aptitude install rubygems
$ gem -v
1.3.5

rubygemsの最新版は1.3.7なので、これはちょっと古いですね。
rails3をインストールするには1.3.7以上が必須なので1.3.7にアップデートします。

$ sudo gem install rubygems-update
% sudo /var/lib/gems/1.8/bin/update_rubygems
$ gem -v
1.3.7

おk。
ではrvmのインストールです。

$ sudo gem install rvm
********************************************************************************

  In order to setup rvm for your user's environment you must now run rvm-install.
  rvm-install will be found in your current gems bin directory corresponding to where the gem was installed.

  rvm-install will install the scripts to your user account and append itself to your profiles in order to
  inject the proper rvm functions into your shell so that you can manage multiple rubies.

********************************************************************************
Successfully installed rvm-1.0.13
1 gem installed
...
...

こんな感じでgemで入ります。インストールはこれだけでは完了せず、「これが終わったら『rvm-install』ってコマンドを実行しろよ」というメッセージがでてるので、やってみます。

$ rvm-install

特に問題なく終わりました。
では、ruby1.9.2をインストールしてみましょう。

$ rvm install 1.9.2
...
...
ruby-1.9.2-p0 - #downloading ruby-1.9.2-p0, this may take a while depending on your connection...
rvm requires curl. curl was not found in your active path.
There has been an error while trying to fetch the source.
Halting the installation.
There has been an error fetching the ruby interpreter. Halting the installation.

ふむ、curlが入ってない。。。と。。。

$ sudo aptitude install curl
$ rvm install 1.9.2

これでうまくいきました。
ソースをダウンロードしてコンパイルするので結構時間かかりました。
ruby関連の環境変数の設定をするために.bashrcをちょっと改造します。

$ vi ./.bachrc

として

if [[ -s $HOME/.rvm/scripts/rvm ]] ; then
    source $HOME/.rvm/scripts/rvm
fi

を最後に追加。追加後は

$ source .bashrc

とします。

$ echo $GEM_PATH
~/.rvm/gems/ruby-1.9.2-p0:~/.rvm/gems/ruby-1.9.2-p0@global

みたくなってたら成功。
これで、デフォルトのrubyインタプリタを1.9.2に設定できます。

$ rvm 1.9.2 --default
$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

おkですね。which rubyとかでも確かめてみるといいと思います。
さて、いよいよrails3のインストール。

$ gem install rails
ERROR:  Loading command: install (LoadError)
    no such file to load -- zlib
...

おやおや、いきなりひっかかった。
調べてみるとzlibのdevelopmentパッケージが必要らしい。ubuntuの場合は『zlib1g-dev』というものらしい。それをインストールしたら設定してmakeしてやる必要があるみたいです。

$ sudo aptitude install zlib1g-dev
$ cd ~/.rvm/src/ruby-1.9.2-p0/ext/zlib
$ ruby extconf.rb
$ make
$ make install

あとついでに、railsのインストールの前に、sqliterubyパッケージもインストールしちゃいました。

$ gem install sqlite3-ruby

これでいけるかな・・・?

$ gem install rails
Successfully installed activesupport-3.0.0
Successfully installed builder-2.1.2
Successfully installed i18n-0.4.1
...
...
...

いきましたね!

$ rails -v
Rails 3.0.0

ということでrails3のインストール完了です。
早速プロジェクトを作ってみましょう。
rails3からは、『rails 〇〇』という感じですべてはrailsコマンドから制御するみたいです。

$ rails new hoge

いつものようにプロジェクトが作られます。

$ cd hoge
$ rails server
Could not find gem 'sqlite3-ruby (>= 0, runtime)' in any of the gem sources.
Try running `bundle install`.

ん、sqlite3-rubyはさっきいれたんだけどなぁ。。。とりあえず『bulde install』としてみます。

$ bundle install

としたらなんかエラーみたいな文章がウジャーっとでてきました。
あ、そうだ、sqlite3の本体を入れてなかった!というのに後々気づくw

$ sudo aptitude install sqlite3
$ sudo aptitude install libsqlite3-dev

インストールします。
さっきやった『gem install sqlite3-ruby』の前にやっておくべしたね。

$ bundle install
...
...
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

バンドルが成功したとでました。

$ rails server
=> Booting WEBrick
=> Rails 3.0.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-10-04 23:48:28] INFO  WEBrick 1.3.1
[2010-10-04 23:48:28] INFO  ruby 1.9.2 (2010-08-18) [i686-linux]
[2010-10-04 23:48:28] INFO  WEBrick::HTTPServer#start: pid=21922 port=3000
...
...

やったー!!
おなじみのサーバの起動画面がでました。
よかったよかった。これで
http://:3000/
にアクセスしたら、『Welcome aboard』の画面がでました。
めでたしめでたし。


とりあえず、今日はここまで。

俺の嫁と過ごすクリスマス♪

メリーくるしみます\(^o^)/

今日の夜は嫁たちがどーしてもとうるさいので、3人で過ごすことになりました( ^ω^)

左の嫁のほうにはちょっと可愛らしくJINRO梅酒。
右の嫁(かみさんと呼んでます)にはJINRO25度。
手前のJINROがおいらの。
コップ?なにそれ、おいしいの?
もちろん瓶でラッパ飲みですがなにか。

みなさんも素敵なくるしみますをお過ごしくださいヽ(´ー`)ノ