Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

無料で活用!AWS ー EC2 + Ruby on Rails 4.1(その2) ー

こんにちは。中山です。

無料で活用!AWS ー EC2 + Ruby on Rails 4.1(その1) ー」では、Amazon Web ServicesAWS)の EC2 インスタンスを作成して起動するところまでを実践してみました。

今回はそのインスタンス上で、Ruby on Rails(バージョン4.1)の環境を構築して、サンプルアプリを動作させてみようと思います。

なお「Ruby on Rails」については、当ブログの記事「Ruby on Rails4.0を使ってみる」、もしくは公式のガイドページを参考にしてください。

1.EC2 インスタンスの起動

今回も、クライアント側は Mac を利用します。
EC2 インスタンスが停止している場合は起動して、コンソールから SSH 接続を行います。
(詳しい手順については、前回の記事の「3.EC2 インスタンスの起動と終了」を参照してください。)

$ ssh -i myprivatekey.pem ec2-user@{Public IP の値}

 

2.ライブラリインストール状況の確認

2−1.yum update

SSH 接続後、コンソールに以下のような表示が出ていた場合、

5 package(s) needed for security, out of 11 available
Run "sudo yum update" to apply all updates.

以下のコマンドを実行して、ライブラリを更新します。

$ sudo yum update

 

2−2.インストール状況の確認

次に「ruby」がインストールされているかどうか確認します。

$ ruby -v
ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-linux]

ruby」はバージョン2.0 がインストールされていました。「Ruby on Rails」は?

$ rails --version
-bash: rails: コマンドが見つかりません

Ruby on Rails」はインストールされていないようでした。
 

3.「Ruby on Rails」と関連ライブラリのインストール

3−1.「Ruby on Rails」のインストール

以下のコマンドを実行して、「Ruby on Rails」をインストールします。

$ sudo gem install rails

バージョンを確認します。

$ rails --version
Rails 4.1.1

 

3−2.関連ライブラリのインストール

Ruby on Rails」アプリの実行に必要なライブラリをインストールします。以下のコマンドを実行します。

$ sudo yum install ruby-devel
$ sudo yum install gcc
$ sudo yum install sqlite-devel
$ sudo yum install gcc-c++

実はこれらのライブラリは、後ほど紹介する「Ruby on Rails」のサンプルアプリの設定と実行の際に、必要とされたものです。
実行するアプリの内容によっては、このほかにも必要なライブラリが出てくるかもしれません。
 

3−3.「Git」のインストール

「Git」もインストールしておきます。以下のコマンドを実行します。

$ sudo yum install git

バージョンを確認します。

$ git --version
git version 1.8.3.1

 

4.「Ruby on Rails」サンプルアプリの設定と実行

4−1.サンプルアプリのソース取得

Ruby on Rails」アプリ用のフォルダ(ここでは「rails」フォルダ)を作成しておきます。

$ pwd
/home/ec2-user
$ mkdir rails
$ cd rails

サンプルアプリのソースは、あらかじめ登録しておいた「GitHub」のリポジトリから取得することにします。

$ git clone https://github.com/hatena-iti/blog.git
$ cd blog

なお今回利用するサンプルアプリは、「Ruby on Rails」の公式のガイドページで紹介されている、チュートリアル用のアプリとほぼ同じものです。
簡易的なブログの機能を提供するアプリケーションであり、そのデータは、内部の SQLite データベースに保存します。
 

4−2.サンプルアプリの設定

サンプルアプリに必要なパッケージをインストールします。以下のコマンドを実行します。

$ bundle install

もし以下のようなメッセージが表示された場合、パッケージのインストールに必要なライブラリが不足している可能性があります。

An error occurred while installing ***, and Bundler cannot continue.

このような場合は、出力されているエラーメッセージを参考に、必要なライブラリを(「sudo yum install ***」コマンドで)インストールします。

次に、サンプルアプリのデータベースのマイグレーションを行います。以下のコマンドを実行します。

$ rake db:migrate

もし以下のようなメッセージが表示された場合、

rake aborted!
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. 
See https://github.com/sstephenson/execjs for a list of available runtimes.

Gemfile」ファイルの中の、

gem 'therubyracer',  platforms: :ruby

の部分のコメントを外して、再度以下のコマンドを実行します。

$ bundle install
$ rake db:migrate

 

4−3.secrets.yml の作成

Ruby on Rails」のバージョン 4.1 では「secrets.yml」というファイルが「config」フォルダ内に生成されるようになりました。(参考:Ruby on Rails 4.1 Release Notes
しかしこの「secrets.yml」ファイルは、(セキュリティの確保のために)デフォルトでは git リポジトリの管理対象外になっています。
したがいまして、今回のように「git clone」コマンドでソースを取得したような場合には、「secrets.yml」ファイルが存在しません。

これを解決するために、「config」フォルダに、「secrets.yml」ファイルを手動で作成します。

「secrets.yml」は、以下のようなフォーマットになっています。

development:
  secret_key_base: {シークレットキー(30文字以上の英数字)}

test:
  secret_key_base: {シークレットキー(30文字以上の英数字)}

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

シークレットキーの値は

$ rake secret

のコマンドで生成することができます。このコマンドで生成した値を、「secrets.yml」内の「secret_key_base」項目の値として貼付けます。

できあがった「secrets.yml」ファイルは、例えば以下のような内容となります。

development:
  secret_key_base: eac8dd0e8eb50b30e94260759c4e147b9284d741799137dd3634a013519735bff4419bad647f02ec558c5cf16a86923d8c793672ec2dd6797219ee63********

test:
  secret_key_base: af3ef6d80a23b3b71866cd575f0de272fdd24e67f60841234e8e9f7c2009cf928d95e7b1bd72badb11de3b7de95e3beca119e297053efac1c92ae11a********

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

 

4−4.サンプルアプリの実行

以下のコマンドを実行します。

$ rails server

Mac のブラウザから、以下の URL にアクセスします。

http://{EC2 インスタンスの Public IP}:3000/

以下のようなページが表示されれば、成功です。

f:id:IntelligentTechnology:20140516145153p:plain:w560
 

まとめ

いったん環境ができあがってしまえば、何のことはなく、普通の Linux サーバとして、どんどん自由に使えます。
私自身も、以前は「AWSって、いろいろ設定が面倒なんじゃないのかなぁ」などと勝手に考えていたのですけれども、このような「食わず嫌い」を解消するためにも、無料利用の仕組みが提供されているのは、本当にありがたいと思いました。

また引き続き、いろいろと機能を試してみようと考えています。