読者です 読者をやめる 読者になる 読者になる

archlinuxでrailsを使おうとしたときにハマったことメモ

このエントリは過去のエントリです

今更感半端ないがruby on railsでアプリ開発を始めようとしてハマったことの自分用メモ。
細かいインストール方法とかは今更ここで語るまでもあるまい。

バイナリの実行について

始めにgem installでrailsなりbundlerなりをインストールするも
僕の環境では、

rails new アプリケーション名
bundle install

といったコマンドは「コマンドが見つかりません」と出て使えなかった。
原因はpathが通ってないからで、

export PATH="$PATH:/home/ユーザ名/.gem/ruby/1.9.1/bin"

としたら動いた。
※ローカルユーザでgem installする場合はこれでもいいっぽいが、
 普通は「/usr/lib/ruby/gems/1.9.1/bin」を通すのかも

rails generate controller コントローラ名」でエラーが出る

「Could not find a JavaScript runtime」的なエラーがでてコントローラーが作られない。
ググってみると、Gemfileの中に

gem 'execjs'

gem 'therubyracer'

を入れて「bundle install」すればよいとのこと。
だが「bundle install」してみると、

An error occurred while installing therubyracer (0.11.3), and Bundler cannot continue.
Make sure that `gem install therubyracer -v '0.11.3'` succeeds before bundling.

こんなエラーが出て失敗。
エラーの指示通り「gem install therubyracer -v '0.11.3'」すると、

/usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/ext/libv8/location.rb:15:in `initialize': Permission denied - /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/ext/libv8/.location.yml (Errno::EACCES)
from /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/ext/libv8/location.rb:15:in `open'
from /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/ext/libv8/location.rb:15:in `load!'
from /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/lib/libv8.rb:6:in `configure_makefile'
from extconf.rb:32:in `

'

こんなエラーが。
よくわからないが権限がないっぽいので、「/usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/ext/libv8/.location.yml」に一般ユーザーのr権限をつけてみるとエラー内容が

/usr/bin/ld: /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a が見つかりません: 許可がありません
/usr/bin/ld: /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64-linux/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_snapshot.a が見つかりません: 許可がありません
collect2: エラー: ld はステータス 1 で終了しました
make: *** [init.so] エラー 1

こんな感じに変わった。
また別なとこの権限っぽいので、

$ cd /usr/lib/ruby/gems/1.9.1/gems/libv8-3.11.8.13-x86_64linux/vendor/v8/out/x64.release/obj.target/tools/gyp
$ sudo chmod 644 libv8_*

これで権限はオッケーのはず。
再度「gem install therubyracer -v '0.11.3'」に挑む。

$ gem install therubyracer -v '0.11.3'
Building native extensions. This could take a while...
Successfully installed therubyracer-0.11.3
1 gem installed

はあああやっとインスコできた。
このあと無事「bundle install」「rails generate controller コントローラー」できた。

途中の権限を自分でつけたあたりのファイルは「~/.gem」以下の方ではなくて、「/usr/lib/ruby/gems」以下の方を探しに行ってたっぽいので、sudoでroot権限としてインストールしたgemと、sudoなしでローカルとしてインストールしたgemとで権限がずれてエラーがでるっぽい。
今回の対応も正解とは言い難い気がしていて、根本的解決には全部のgemをrootでインストールしなおすか、rootでインストールしたgemを消すなりしないといけない気がする。
そうしないと整合性とれなくなっておかしな挙動するかもってのが今のところの懸念。
まぁその時はその時でとりあえずアプリを書き始めようと思います。