7.3. Ruby on Rails
7.3.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
Ruby on Rails は Ruby で記述された一般的な Web フレームワークです。本書では、OpenShift Online での Rails 4 の使用について説明します。
チュートリアル全体をチェックして、OpenShift Online でアプリケーションを実行するために必要なすべての手順を概観することを強く推奨します。問題に直面した場合には、チュートリアル全体を振り返り、もう一度問題に対応してください。またチュートリアルは、実行済みの手順を確認し、すべての手順が適切に実行されていることを確認するのに役立ちます。
本書では、以下があることを前提としています。
- Ruby/Rails の基本知識
- Ruby 2.0.0+、Rubygems、Bundler のローカルにインストールされたバージョン
- Git の基本知識
- OpenShift Online でプロビジョニングされたアカウント
7.3.2. ローカルのワークステーション設定 リンクのコピーリンクがクリップボードにコピーされました!
まず、OpenShift Online のインスタンスが実行中であり、利用可能であることを確認してください。さらに、oc CLI クライアントがインストールされており、コマンドがコマンドシェルからアクセスできることを確認し、メールアドレスおよびパスワードを使用してログインする際にこれを使用できるようにします。
7.3.2.1. データベースの設定 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションはほぼ常にデータベースと併用されます。ローカル開発の場合は、PostgreSQL データベースを選択してください。PostgreSQL データベースをインストール方法するには、以下を入力します。
sudo yum install -y postgresql postgresql-server postgresql-devel
$ sudo yum install -y postgresql postgresql-server postgresql-devel
次に、以下のコマンドでデータベースを初期化する必要があります。
sudo postgresql-setup initdb
$ sudo postgresql-setup initdb
このコマンドで /var/lib/pgsql/data ディレクトリーが作成され、このディレクトリーにデータが保存されます。
以下を入力してデータベースを起動します。
sudo systemctl start postgresql.service
$ sudo systemctl start postgresql.service
データベースが実行されたら、rails ユーザーを作成します。
sudo -u postgres createuser -s rails
$ sudo -u postgres createuser -s rails
作成をしたユーザーのパスワードは作成されていない点に留意してください。
7.3.3. アプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションをゼロからビルドするには、Rails gem を先にインストールする必要があります。
gem install rails
$ gem install rails
Successfully installed rails-4.2.0
1 gem installed
Rails gem のインストール後に、PostgreSQL をデータベースとして 指定して新規アプリケーションを作成します。
rails new rails-app --database=postgresql
$ rails new rails-app --database=postgresql
次に、新規ディレクトリーに移動します。
cd rails-app
$ cd rails-app
アプリケーションがすでにある場合には pg (postgresql) gem が Gemfile に配置されているはずです。配置されていない場合には、Gemfile を編集して gem を追加します。
gem 'pg'
gem 'pg'
すべての依存関係を含む Gemfile.lock を新たに生成するには、以下を実行します。
bundle install
$ bundle install
pg gem で postgresql データベースを使用することのほかに、config/database.yml が postgresql アダプターを使用していることを確認する必要があります。
config/database.yml ファイルの default セクションを以下のように更新するようにしてください。
アプリケーションの開発およびテストデータベースを作成するには、以下の rake コマンドを使用します。
rake db:create
$ rake db:create
これで PostgreSQL サーバーに development および test データベースが作成されます。
7.3.3.1. Welcome ページの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails 4 では、静的な public/index.html ページが実稼働環境で提供されなくなったので、新たに root ページを作成する必要があります。
welcome ページをカスタマイズするには、以下の手順を実行する必要があります。
- index アクションで コントローラー を作成します。
-
welcomeコントローラーindexアクションの ビュー ページを作成します。 - 作成した コントローラー と ビュー と共にアプリケーションの root ページを提供する ルート を作成します。
Rails には、これらの必要な手順をすべて実行するジェネレーターがあります。
rails generate controller welcome index
$ rails generate controller welcome index
必要なファイルはすべて作成されたので、config/routes.rb ファイルの 2 行目を以下のように編集することのみが必要になります。
root 'welcome#index'
root 'welcome#index'
rails server を実行して、ページが利用できることを確認します。
rails server
$ rails server
ブラウザーで http://localhost:3000 に移動してページを表示してください。このページが表示されない場合は、サーバーに出力されるログを確認してデバッグを行ってください。
7.3.3.2. OpenShift Online のアプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションと OpenShift Online で実行されている PostgreSQL データベースサービスとを通信させるには、環境変数を使用するように config/database.yml の default セクションを編集する必要があります。 環境変数は、後のデータベースサービスの作成時に定義します。
編集した config/database.yml の default セクションに事前定義済みの変数を入力すると、以下のようになります。
最終的なファイルの内容のサンプルについては、「Ruby on Rails アプリケーションの例 config/database.yml」を参照してください。
7.3.3.3. git へのアプリケーションの保存 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Online には git が必要なので、まだインストールされていない場合はインストールする必要があります。
OpenShift Online でアプリケーションをビルドするには通常、ソースコードを git リポジトリーに保存する必要があるため、git がない場合にはインストールしてください。
ls -1 コマンドを実行して、Rails アプリケーションのディレクトリーで操作を行っていることを確認します。コマンドの出力は以下のようになります。
Rails app ディレクトリーでこれらのコマンドを実行して、コードを初期化して、git にコミットします。
git init git add . git commit -m "initial commit"
$ git init
$ git add .
$ git commit -m "initial commit"
アプリケーションをコミットしたら、リモートのリポジトリーにプッシュする必要があります。これには、GitHub アカウント が必要です。 このアカウントで 新しいリポジトリーを作成します。
お使いの git リポジトリーを参照するリモートを設定します。
git remote add origin git@github.com:<namespace/repository-name>.git
$ git remote add origin git@github.com:<namespace/repository-name>.git
次に、アプリケーションをリモートの git リポジトリーにプッシュします。
git push
$ git push
7.3.4. アプリケーションの OpenShift Online へのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
rails-app プロジェクトの作成後、新規プロジェクトの namespace に自動的に切り替えられます。
OpenShift Online へのアプリケーションのデプロイでは 3 つの手順を実行します。
- OpenShift Online の PostgreSQL イメージからデータべースサービスを作成します。
- OpenShift Online の Ruby 2.0 ビルダーイメージと Ruby on Rails のソースコードでフロントエンドのサービスを作成します。これをデータベースサービスに接続します。
- アプリケーションのルートを作成します。
7.3.4.1. データベースサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションには、実行中のデータベースサービスが必要です。このサービスには、PostgeSQL データベースイメージを使用します。
データベースサービスを作成するために、oc new-app コマンドを使用します。このコマンドでは、必要な環境変数を渡す必要があります。この環境変数はデータベースコンテナー内で使用します。これらの環境変数は、ユーザー名、パスワード、およびデータベースの名前を設定するために必要です。 これらの環境変数の値を任意の値に変更できます。今回設定する変数は以下の通りです。
- POSTGRESQL_DATABASE
- POSTGRESQL_USER
- POSTGRESQL_PASSWORD
これらの変数を設定すると、以下を確認できます。
- 指定の名前でデータベースが存在する
- 指定の名前でユーザーが存在する
- ユーザーは指定のパスワードで指定のデータベースにアクセスできる
以下は例になります。
oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password
$ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password
データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
このコマンドの進捗を確認するには、以下を実行します。
oc get pods --watch
$ oc get pods --watch
7.3.4.2. フロントエンドサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを OpenShift Online にデプロイするには、oc new-app コマンドをもう一度使用して、アプリケーションを配置するリポジトリーを指定する必要があります。このコマンドでは、「 データベースサービスの作成」で設定したデータベース関連の環境変数を指定する必要があります。
oc new-app path/to/source/code --name=rails-app -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password -e POSTGRESQL_DATABASE=db_name -e DATABASE_SERVICE_NAME=postgresql
$ oc new-app path/to/source/code --name=rails-app -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password -e POSTGRESQL_DATABASE=db_name -e DATABASE_SERVICE_NAME=postgresql
このコマンドでは、OpenShift Online は指定された環境変数を使用して、ソースコードの取得、ビルダーイメージのセットアップ、アプリケーションイメージのビルド、新規に作成されたイメージのデプロイを実行します。このアプリケーションは rails-app という名前に指定します。
rails-app DeploymentConfig の JSON ドキュメントを参照して、環境変数が追加されたかどうかを確認できます。
oc get dc rails-app -o json
$ oc get dc rails-app -o json
以下のセクションが表示されるはずです。
ビルドプロセスを確認するには、以下を実行します。
oc logs -f build rails-app-1
$ oc logs -f build rails-app-1
ビルドが完了すると、OpenShift Online で Pod が実行されていることを確認できます。
oc get pods
$ oc get pods
myapp-<number>-<hash> で始まる行が表示されますが、これは OpenShift Online で実行中のアプリケーションです。
データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。
- 実行中のフロントエンドコンテナーから手動で実行する
最初に rsh コマンドでフロントエンドコンテナーに対して実行します。
oc rsh <FRONTEND_POD_ID>
$ oc rsh <FRONTEND_POD_ID>
コンテナー内から移行を実行します。
RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake db:migrate
development または test 環境で Rails アプリケーションを実行する場合には、RAILS_ENV の環境変数を指定する必要はありません。
- デプロイメント前のライフサイクルフックをテンプレートに追加する。たとえば、Rails サンプル アプリケーションの フックのサンプル を確認します。
7.3.4.3. アプリケーションのルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下を入力してフロントエンドサービスを公開します。
oc expose service rails-app
$ oc expose service rails-app