2015年4月14日火曜日

Rails をインストールする (Ubuntu/VirtualBox/Windows)

Windows 上に Rails をインストールしようとしたところ、簡単に解決しなさそうな問題がいろいろ出てきたので、Windows に直接 Rails をインストールすることは諦め※1、Windows に仮想化ソフト VirtualBox を入れてその上で Ubuntu を動かし、そこに Rails をインストールすることにした。しかしそれでも、幾つも問題に遭遇したので、手順を書き残しておく。

※1:その後、問題回避策として「gem update --system 2.3.0」をおこなったら、Windows でも Rails が動いた。(参考: Rubygems Issue 977


1. 仮想ハードディスクイメージのダウンロード

VirtualBox で作成する仮想マシンの仮想ハードドライブとして使用するイメージを「日本語 Remix 仮想ハードディスクイメージのダウンロード」ページからダウンロードする。現時点 (2015/4/14) では次の二つが存在するが、Ubuntu 14.04 LTS のほうは、VirtualBox で利用したときに黒画面のまま先に進まなくなるので、Ubuntu 12.04 LTS のほうを使う。


2. VirtualBox のインストール

Download VirtualBox」ページから Windows 用の VirtualBox をダウンロードし、インストールする。現時点 (2015/4/14) ではバージョン 4.3.26 が最新。

  • VirtualBox 4.3.26 for Windows hosts → x86/amd64

3. 仮想マシン作成

VirtualBox 起動後、「新規」ボタンを押して新しい仮想マシンの作成を開始する。「名前とオペレーティングシステム」のタイプとバージョンでは Linux と Ubuntu (32 bit) を選ぶ。(Ubuntu (64 bit) の選択肢は存在しない)


 「ハードドライブ」では、先にダウンロードしておいた Ubuntu の仮想ハードディスクイメージ (ubuntu-ja-12.04-desktop-i386.vhd) を指定する。



4. Ubuntu の初期設定

VirtualBox で、作成した仮想マシンを選択し、「実行」ボタンを押して仮想マシンを起動する。起動後、BIOS 云々のエラーメッセージが表示されるが、しばらくすると Ubuntu が起動する。案内に従って Ubuntu の初期設定をおこなう。


5. ディストリビューションのアップグレード

Ubuntu のデスクトップが表示されると、画面左側のメニューアイコン群内にあるアップデートマネージャーが、更新を知らせてくる。見ると、「Ubuntu の新しいリリース '14.04.2 LTS' が利用可能です」と言っている。そこで、促されるままにアップグレードをおこなう。なお、完了までにかなり時間がかかる。また、途中で幾つかアップデートに失敗するものがあり、確認ボタンを押すことを求められる(自動応答する方法があるとは思うのだが・・・)。




6. Ruby バージョンアップ

現時点 (2015/4/14) では、Ruby の最新バージョンは 2.2.2 である (2015/4/13 にリリース)。Ruby 2.2 系をインストールすることにするが、普通に apt-get install ruby をしても、Ruby 2.2 はインストールされない。そこで、BrightboxRuby packages for Ubuntu に書かれている手順を参考に Ruby 2.2 をインストールする。

apt-get install software-properties-common
apt-add-repository ppa:brightbox/ruby-ng
apt-get update
apt-get install ruby2.2


7. GEM アップデート

gem update --system


8. Bundler インストール

gem install bundler


9. Rails インストール

Rails のインストールは下記のコマンドで実行できるが、いろいろエラーが発生する。以降では、発生するエラーを一つずつ潰していく。

gem install rails


10. Ruby 開発用パッケージのインストール

最初のエラーは /usr/lib/ruby/include/ruby.h というヘッダーファイルが見つからないというエラー。

Fetching: nokogiri-1.6.6.2.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.

    /usr/bin/rby2.2 -r ./siteconf20150414-3343-7itg1c.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.2.0/gems/nokogiri-1.6.6.2 for inspection.
Results logged to /var/lib/gems/2.2.0/extensions/x86-linux/2.2.0/nokogiri-1.6.6.2/gem_make.out

Ruby エクステンションをコンパイルするためには Ruby 開発用のパッケージが必要だそうなので、インストールする。

apt-get install ruby2.2-dev
yum install ruby-devel


11. zlib インストール

ruby2.2-dev インストール後に再度 gem install rails を実行すると、次は zlib が見つからないというエラーが出る。

checking if the C compiler accepts ... yes
Building nokogiri using packaged libraries.
checking for gzdopen() in -lz... no
zlib is missing; necessary for building libxml2
??? extconf.rb failed ***

zlib は apt-get install zlib ではインストールできないので、「UbuntuでRals3.2.3 (4) はじめてのRubyGemsは・・・失敗。さあどうする?」を参考にして、下記のコマンドでインストールする。

apt-get install zlib1g-dev
yum install zlib zlib-devel patch

ここまでくれば、gem install rails は成功する。
gem install rails


12. SQLite3 インストール

Getting Started with Rails によると、SQLite3 が必要とのことなので、インストールする。なお、sqlite3-ruby gem は、名前が sqlite3 に変更されたとこのこと。

apt-get install sqlite3
apt-get install libsqlite3-dev
gem install sqlite3
yum install sqlite-devel


13. Rails アプリケーション作成

Rails アプリケーションを試しに作成してみる。

rails new sample


14. Rails アプリケーション実行

作成した Rails アプリケーションを実行してみる。しかし、エラーが出るので、一つずつ潰していく。

cd sample
bin/rails server


15. JavaScript ランタイムのインストール

Rails アプリケーション実行時に発生する最初のエラーは JavaScript ランタイムが見つからないというエラー。

/var/lib/gems/2.2.0/gems/execjs-2.5.2/lib/execjs/runtimes.rb:48:\
in `autodetect': Could not find a JavaScript runtime. See \
https://github.com/rails/execjs for a list of available runtimes. \
(ExecJS::RuntimeUnavailable)

Getting Started with Rails の 4.1 Starting up the Web Server の記述を頼りに Gemfile の中を覗くと、次のような行がある。

# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

therubyracer というのが JavaScript ランタイムの一つらしいので、これをインストールしてみる。

gem install therubyracer

しかし、ここでエラーが発生する。(次へ)


16. コンパイラーインストール

therubyracer インストール時に発生するエラーは、コンパイラーが無いというエラー。

/var/lib/gems/2.2.0/gems/libv8-3.16.14.7/ext/libv8/builder.rb:50:\
in `block in build_libv8!': No compilers available \
(RuntimeError)

このエラーメッセージを頼りにネットを検索すると、「Rails 4 で libv8, therubyracer のインストールにエラー発生」に問題解決方法の記述を発見。update-alternatives のコマンドラインだけ少し変更して実行。

add-apt-repository ppa:ubuntu-toolchain-r/test
apt-get install gcc-4.9
apt-get install g++-4.9
update-alternatives \
  --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 100 \
  --slave   /usr/bin/g++ g++ /usr/bin/g++-4.9
yum install gcc-c++

ここまでくれば、libv8 と therubyracer のインストールは成功する。

gem install libv8
gem install therubyracer


17. JavaScript ランタイム使用

Gemfile の「# gem 'therubyracer', platforms: :ruby」と書かれている行をコメントインし、bundle install する。


vi Gemfile
bundle install


18. Rails アプリケーション実行 (再掲)

やっと Rails アプリケーションを実行できる。

bin/rails server

うまく Rails アプリケーションが起動した場合は、ポート番号 3000 番でHTTP サーバーが待ち受ける。





以上