こんにちは。中山です。
「無料で活用!AWS ー EC2 + Ruby on Rails 4.1(その1) ー」では、Amazon Web Services(AWS)の 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/
以下のようなページが表示されれば、成功です。