[ruby][rails]rails3でconsoleしようとしたらno such file to load -- readline (LoadError)
いつものようにUbuntuでrailsしていて『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とかも入れた後にrubyとrailsインストールしたから、おそらく事前に入っていたのでしょう。
まぁ、なにはともあれ試してみましょう。
$ 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)の最新版のrubyとrailsをインストールした際のメモです。
今回は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のインストールの前に、sqliteのrubyパッケージもインストールしちゃいました。
$ 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://
にアクセスしたら、『Welcome aboard』の画面がでました。
めでたしめでたし。
とりあえず、今日はここまで。