Ruby
Rails

EC2インスタンスに最新のRubyとRailsをインストールしWEBRickでサーバを起動するまで

More than 1 year has passed since last update.

EC2インスタンスで最新版のRubyとRailsをインストールし、WEBRickでサーバを起動するまでで少し詰まった部分があったので手順を記録しておくことにしました。

EC2インスタンスを起動してsshでのログインまでは終わっているものとします。

最新版のrubyのインストール

今回、複数のrubyのバージョン及びディレクトリ毎でのrubyのバージョンを管理できるツールrbenvを用いて最新版のrubyをインストールすることにしました。

gitのインストール

githubからrbenvをクローンするためにyumでgitをインストール

$ sudo yum install git

rbenvをクローン(プラグインのruby-buildも同時にクローンします。)

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

パスを通す。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

公式ドキュメントに記載されている通りに環境を構築する。

$ sudo yum install -y gcc-6 bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel

インストールできるrubyのバージョンを確認。

$ rbenv install --list

今回最新版が2.4.1なのでそれをインストールします。

$ rbenv install 2.4.1

以下のようなエラーが出る。

$ rbenv install 2.4.1
Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...

BUILD FAILED (Amazon Linux AMI 2017.03 using ruby-build 20170523-25-g476d09b)

Inspect or clean up the working tree at /tmp/ruby-build.20170712020011.23389
Results logged to /tmp/ruby-build.20170712020011.23389.log

Last 10 log lines:
config.sub already exists
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/tmp/ruby-build.20170712020011.23389/ruby-2.4.1':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

gccがないと言われているのでインストール。

$ sudo yum install gcc

再びv2.4.1のrubyをインストール。今回はインストールする時間を短縮するためにrubyのドキュメントをインストールしないオプションを付けています。

$ CONFIGURE_OPTS="--disable-install-rdoc" rbenv install 2.4.1

インストールには数分かかりました。

Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...
Installed ruby-2.4.1 to /home/ec2-user/.rbenv/versions/2.4.1

インストール完了。
下記コマンドで環境全体のrubyのバージョンを2.4.1に指定。

$ rbenv global 2.4.1

$ rbenv versionsでカレントディレクトリで有効なrubyのバージョンを確認できます。また、$ rbenv localコマンドでディレクトリ毎にrubyのバージョンを指定することも可能です。

ここまでで最新バージョンのrubyの設定は完了です。

最新版のrailsのインストール

ruby用のバージョン管理ツールであるgemをアップデート

gem update --system

railsをdocumentなしでインストール。

gem install --no-document rails

バージョンを確認。

$ rails -v
Rails 5.1.2

以上で完了です。

WEBRickでサーバを起動

RailsにはWEBrickというWebサーバが付属しているのでApacheなどのインストールなしに動作を確認できます。

まず、ホームディレクトリにmyqppという名前のアプリケーションを作成してみます。

$ rails new myapp

下記のようなエラーが出る。

checking for sqlite3.h... no
sqlite3.h is missing. Try 'brew install sqlite3',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'

指示に従いsqlite-develをインストール。

$ sudo yum -y install sqlite-devel

再びrails new myapp

作成されたmyappディレクトリに移動してrails sコマンドでWEBRickを起動。

$ cd ~/myapp
$ rails s

以下のようなエラーが出る。

/home/ec2-user/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bundler-1.15.1/lib/bundler/runtime.rb:85:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
Backtrace for gem load error is:
......

Gemfileを編集。

$ vim ~/myapp/Gemfile
# See https://github.com/rails/execjs#readme for more supported runtimes
//コメントアウト削除
# gem 'therubyracer', platforms: :ruby 
↓
gem 'therubyracer', platforms: :ruby

再びbundle install
下記のようなエラーが出る。

make "DESTDIR="
compiling accessor.cc
make: g++: コマンドが見つかりませんでした
make: *** [accessor.o] エラー 127

gcc-c++をインストール。

sudo yum -y install gcc-c++

再びbundle install
WEBRickを起動。

$ rails s
=> Booting Puma
=> Rails 5.1.2 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.4.1-p111), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

EC2インスタンスのパブリックIPに3000番ポートでブラウザにアクセス。
パブリックIP:3000
以下のようなページが表示されれば完了です。

rails.png

※3000番ポートでアクセスするために、以下のようなセキュリティグループのインバウンドルールの設定が必要です。
スクリーンショット 2017-07-15 10.36.19.png