3.5. Ruby on Rails を使用したアプリケーションの作成
Ruby on Rails は Ruby で記述される Web フレームワークです。このガイドでは、OpenShift Container Platform での Rails 4 の使用を扱います。
チュートリアル全体をチェックして、OpenShift Container Platform でアプリケーションを実行するために必要なすべての手順を概観してください。問題に直面した場合には、チュートリアル全体を振り返り、もう一度問題に対応してください。またチュートリアルは、実行済みの手順を確認し、すべての手順が適切に実行されていることを確認するのに役立ちます。
3.5.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Ruby および Rails の基本知識
- Ruby 2.0.0+、Rubygems、Bundler のローカルにインストールされたバージョン
- Git の基本知識
- OpenShift Container Platform v4 の実行インスタンス
-
OpenShift Container Platform のインスタンスが実行中であり、利用可能であることを確認してください。さらに、
ocCLI クライアントがインストールされており、コマンドがコマンドシェルからアクセスできることを確認し、メールアドレスおよびパスワードを使用してログインする際にこれを使用できるようにします。
3.5.2. データベースの設定 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションはほぼ常にデータベースと併用されます。ローカル開発の場合は、PostgreSQL データベースを使用します。
手順
データベースをインストールします。
sudo yum install -y postgresql postgresql-server postgresql-devel
$ sudo yum install -y postgresql postgresql-server postgresql-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベースを初期化します。
sudo postgresql-setup initdb
$ sudo postgresql-setup initdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドで
/var/lib/pgsql/dataディレクトリーが作成され、このディレクトリーにデータが保存されます。データベースを起動します。
sudo systemctl start postgresql.service
$ sudo systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベースが実行されたら、
railsユーザーを作成します。sudo -u postgres createuser -s rails
$ sudo -u postgres createuser -s railsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作成をしたユーザーのパスワードは作成されていない点に留意してください。
3.5.3. アプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションをゼロからビルドするには、Rails gem を先にインストールする必要があります。その後に、アプリケーションを作成することができます。
手順
Rails gem をインストールします。
gem install rails
$ gem install railsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Successfully installed rails-4.3.0 1 gem installed
Successfully installed rails-4.3.0 1 gem installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Rails gem のインストール後に、PostgreSQL をデータベースとして指定して新規アプリケーションを作成します。
rails new rails-app --database=postgresql
$ rails new rails-app --database=postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新規アプリケーションディレクトリーに切り替えます。
cd rails-app
$ cd rails-appCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションがすでにある場合には
pg(postgresql) gem がGemfileに配置されていることを確認します。配置されていない場合には、gem を追加してGemfileを編集します。gem 'pg'
gem 'pg'Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての依存関係を含む
Gemfile.lockを新たに生成します。bundle install
$ bundle installCopy to Clipboard Copied! Toggle word wrap Toggle overflow pggem でpostgresqlデータベースを使用するほか、config/database.ymlがpostgresqlアダプターを使用していることを確認する必要があります。config/database.ymlファイルのdefaultセクションを以下のように更新するようにしてください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションの開発およびテスト用のデータベースを作成します。
rake db:create
$ rake db:createCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで PostgreSQL サーバーに
developmentおよびtestデータベースが作成されます。
3.5.3.1. Welcome ページの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails 4 では静的な public/index.html ページが実稼働環境で提供されなくなったので、新たに root ページを作成する必要があります。
Welcome ページをカスタマイズするには、以下の手順を実行する必要があります。
- index アクションでコントローラーを作成します。
- welcome コントローラーの index アクションの view ページを作成します。
- 作成したコントローラーとビューと共にアプリケーションの root ページを提供するルートを作成します。
Rails には、これらの必要な手順をすべて実行するジェネレーターがあります。
手順
Rails ジェネレーターを実行します。
rails generate controller welcome index
$ rails generate controller welcome indexCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべての必要なファイルが作成されます。
以下のように
config/routes.rbファイルの 2 行目を編集します。root 'welcome#index'
root 'welcome#index'Copy to Clipboard Copied! Toggle word wrap Toggle overflow rails server を実行して、ページが利用できることを確認します。
rails server
$ rails serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow ブラウザーで http://localhost:3000 に移動してページを表示してください。このページが表示されない場合は、サーバーに出力されるログを確認してデバッグを行ってください。
3.5.3.2. OpenShift Container Platform のアプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションが OpenShift Container Platform で実行中の PostgreSQL データベースサービスと通信できるようにするには、後のデータベースサービスの作成時に定義する必要のある環境変数を使用できるように config/database.yml の default セクションを編集する必要があります。
手順
以下のように事前に定義した変数で、
config/database.ymlのdefaultセクションを編集します。config/databaseYAML ファイルのサンプルCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.3.3. アプリケーションの Git への保存 リンクのコピーリンクがクリップボードにコピーされました!
通常 OpenShift Container Platform でアプリケーションをビルドする場合、ソースコードを git リポジトリーに保存する必要があるため、git がない場合にはインストールしてください。
前提条件
- git をインストールします。
手順
ls -1コマンドを実行して、Rails アプリケーションのディレクトリーで操作を行っていることを確認します。コマンドの出力は以下のようになります。ls -1
$ ls -1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rails app ディレクトリーで以下のコマンドを実行して、コードを初期化し、git にコミットします。
git init
$ git initCopy to Clipboard Copied! Toggle word wrap Toggle overflow git add .
$ git add .Copy to Clipboard Copied! Toggle word wrap Toggle overflow git commit -m "initial commit"
$ git commit -m "initial commit"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションがコミットされたら、これをリモートリポジトリーにプッシュする必要があります。新規リポジトリーを作成する GitHub アカウントです。
お使いの
gitリポジトリーを参照するリモートを設定します。git remote add origin git@github.com:<namespace/repository-name>.git
$ git remote add origin git@github.com:<namespace/repository-name>.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションをリモートの git リポジトリーにプッシュします。
git push
$ git pushCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.4. アプリケーションの OpenShift Container Platform へのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform にアプリケーションをデプロイすることができます。
rails-app プロジェクトの作成後、新規プロジェクトの namespace に自動的に切り替えられます。
OpenShift Container Platform へのアプリケーションのデプロイでは 3 つの手順を実行します。
- OpenShift Container Platform の PostgreSQL イメージからデータベースサービスを作成します。
- データベースサービスと連動する OpenShift Container Platform の Ruby 2.0 ビルダーイメージおよび Ruby on Rails ソースコードのフロントエンドサービスを作成します。
- アプリケーションのルートを作成します。
手順
Ruby on Rails アプリケーションをデプロイするには、アプリケーション用に新規のプロジェクトを作成します。
oc new-project rails-app --description="My Rails application" --display-name="Rails Application"
$ oc new-project rails-app --description="My Rails application" --display-name="Rails Application"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.4.1. データベースサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションには実行中のデータベースサービスが必要です。このサービスには、PostgreSQL データベースイメージを使用します。
データベースサービスを作成するために、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=passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
-e POSTGRESQL_ADMIN_PASSWORD=admin_pwCopy to Clipboard Copied! Toggle word wrap Toggle overflow 進行状況を確認します。
oc get pods --watch
$ oc get pods --watchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.4.2. フロントエンドサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを OpenShift Container Platform にデプロイするには、アプリケーションが置かれるリポジトリーを指定する必要があります。
手順
フロントエンドサービスを作成し、データベースサービスの作成時に設定されたデータベース関連の環境変数を指定します。
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=postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドでは、OpenShift Container Platform は指定された環境変数を使用してソースコードの取得、ビルダーのセットアップ、アプリケーションイメージのビルド、新規に作成されたイメージのデプロイを実行します。このアプリケーションには
rails-appという名前を指定します。rails-appデプロイメント設定の JSON ドキュメントを参照して、環境変数が追加されたかどうかを確認できます。oc get dc rails-app -o json
$ oc get dc rails-app -o jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のセクションが表示されるはずです。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ビルドプロセスを確認します。
oc logs -f build/rails-app-1
$ oc logs -f build/rails-app-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ビルドが完了すると、OpenShift Container Platform で Pod が実行されていることを確認します。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow myapp-<number>-<hash>で始まる行が表示されますが、これは OpenShift Container Platform で実行中のアプリケーションです。データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。
実行中のフロントエンドコンテナーから手動で実行する
rshコマンドでフロントエンドコンテナーに exec を実行します。oc rsh <frontend_pod_id>
$ oc rsh <frontend_pod_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー内から移行を実行します。
RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake db:migrateCopy to Clipboard Copied! Toggle word wrap Toggle overflow developmentまたはtest環境で Rails アプリケーションを実行する場合には、RAILS_ENVの環境変数を指定する必要はありません。
- デプロイメント前のライフサイクルフックをテンプレートに追する
3.5.4.3. アプリケーションのルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションのルートを作成するためにサービスを公開できます。
手順
www.example.comなどの外部からアクセスできるホスト名を指定してサービスを公開するには、OpenShift Container Platform のルートを使用します。この場合は、以下を入力してフロントエンドサービスを公開する必要があります。oc expose service rails-app --hostname=www.example.com
$ oc expose service rails-app --hostname=www.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
指定するホスト名がルーターの IP アドレスに解決することを確認します。