CentOSにRubyOnRailsを導入したときにハマったところまとめ

達人出版会から出ている「はじめる!Rails3」を読みはじめました。
基本的に開発はMacで行うのだけど、自鯖があるので環境構築だけでもやってみようと挑戦したところいろいろハマりました。(よって今日は眠い)

環境

CentOS release 5.7 (Final)
ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux](rvm使用)

ここに「はじめる!Rails3」通りにサンプルが実行できるよう環境を整えていきました。

sqlite

サンプルアプリ用のDBインストールでいきなり躓く。

$ sudo yum install sqlite3-devel
Loaded plugins: priorities, security
144 packages excluded due to repository priority protections
Setting up Install Process
No package sqlite3-devel available.
Nothing to do

・・・ない。
sqliteはあるけど、sqlite3はいない。

SQLite/Rubyライブラリにはsqlite3.6.16以上が必要なのだが、yumではsqlite3.3.6以上はインストールできない事が判明。
ということでSQLiteのサイトからソースコードでインストール。
CentOSの場合は「sqlite-autoconf-3071000.tar.gz」を使いました。

# wget http://www.sqlite.org/sqlite-autoconf-3071000.tar.gz
# tar xzvf sqlite-autoconf-3071000.tar.gz
# cd sqlite-autoconf-3071000
# ./configure
# make
# make install

一発で成功したー。(珍しい・・・)
ブログ「俺の作業録」を参考にさせて頂きました。ありがとうございました。
http://d.hatena.ne.jp/pirosikick/20101103/1288796756

Bundlerが使えない

gem install rails でrailsはすんなりと入った。
その後、いざ、railsアプリを作ろうと

$ rails new hinagiku

と打ったところ、何やら末尾に大量のエラーが…。
とりあえず、動くかどうかやってみようと動かしてみたところ、やっぱり動かなかった。
エラー出てたもんね。

$ rails server
Could not find jquery-rails-2.0.0 in any of the sources
Run `bundle install` to install missing gems.

必要なライブラリがないからbundle installをしなければいけない。
(bundlerはこの前のえにしテックカフェで知ったよ ・∀・)

$ bundle install
Fetching source index for https://rubygems.org/
(略・・・)LoadError: no such file to load -- openssl
(ずらずらずらとライブラリのインストールエラー)

これ、rails newした時に出ていたのと同じエラーである。
なるほど、rails new したときにbundle installしようとしてコケていたのか。
ライブラリがインストールできていないのだけど、元をたどれば「opensslがない」と。

調べてみたら、rvmでrubyをインストールする場合、opensslのオプションを付けてあげる必要があることがわかった。rvmのサイトを見ながらrubyをreinstallして解決。

$ rvm pkg install openssl
$ rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr

このあとbundle installしたら問題なくライブラリのインストール、紐付けが行われた。
期せずしてはじめてのbundle installコマンド。

ちなみに、上記はrvmで管理しているRubyのどれかのバージョンで1回やれば大丈夫みたい。
1.9.3でrails環境を作ったあとに、rvmにインストールした1.9.2(opensslの指定なし)でrails環境作ったときにはエラーにならなかった。

JavaScriptエンジンがない?

これでサーバーは立ち上がる・・・はず・・・!
rails server は rails s でも実行できるのね、ふmふm。

$ rails s
(略)/lib/ruby/gems/1.9.3/gems/execjs-1.2.4/lib/execjs/runtimes.rb: \
45:in `autodetect': Could not find a JavaScript runtime. 
See https://github.com/sstephenson/execjs for a list of available runtimes. 

JavaScript runtimeがない、のか。
調べてみたところ、Rails 3.1 から内部で CaffeeScript を使うようになったことで、実行時にJavaScriptランタイムが必須になったようです。

railsアプリケーションフォルダ直下にあるGemfileに

gem 'therubyracer'

を書いてbundle install。
これでRubyで使えるv8インタプリタのtherubyracerが入りましたー。
node.jsでもよかったみたい。
Macにはnode.jsが入っていたから特にエラーにならなかったのかな。

参考にさせてもらったサイト
http://d.hatena.ne.jp/kano4/20110708/javascript_runtime_error
http://d.hatena.ne.jp/kano4/20111201/javascript_runtime_error_part2
http://blog.glidenote.com/blog/2012/01/07/rails3.1-could-not-find-a-javascript-runtime./
http://www.ruby-forum.com/topic/1899392

上記を乗り越えて、自鯖でrails構築ができるようになりました!
rails sを実行してから、自鯖で開発していたらrails sしても外から簡単にアクセスすることができないじゃないと気がついたりはしたのだけど、環境構築は繰り返して勘を掴んでいくのが慣れる近道なのかも。

ちなみにMacで同じ環境を作ったのだけど、1つも躓くことなくサクっと環境が出来上がりました。
開発や学習はMacメインでやっていく予定です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください