3.5. Ruby on Rails を使用したアプリケーションの作成
Ruby on Rails は Ruby で記述される Web フレームワークです。本書では、OpenShift Dedicated での Rails 4 の使用を説明します。
チュートリアル全体をチェックして、OpenShift Dedicated でアプリケーションを実行するために必要なすべての手順を概観してください。問題に直面した場合には、チュートリアル全体を振り返り、もう一度問題に対応してください。またチュートリアルは、実行済みの手順を確認し、すべての手順が適切に実行されていることを確認するのに役立ちます。
3.5.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Ruby および Rails の基本知識
- Ruby 2.0.0+、Rubygems、Bundler のローカルにインストールされたバージョン
- Git の基本知識
- OpenShift Dedicated 4 の実行中のインスタンス
-
OpenShift Dedicated のインスタンスが実行中であり、利用可能であることを確認してください。さらに、
ocCLI クライアントがインストールされており、コマンドがコマンドシェルからアクセスできることを確認し、メールアドレスおよびパスワードを使用してログインする際にこれを使用できるようにします。
3.5.2. データベースの設定 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションはほぼ常にデータベースと併用されます。ローカル開発の場合は、PostgreSQL データベースを使用します。
手順
データベースをインストールします。
$ sudo yum install -y postgresql postgresql-server postgresql-develデータベースを初期化します。
$ sudo postgresql-setup initdbこのコマンドで
/var/lib/pgsql/dataディレクトリーが作成され、このディレクトリーにデータが保存されます。データベースを起動します。
$ sudo systemctl start postgresql.serviceデータベースが実行されたら、
railsユーザーを作成します。$ sudo -u postgres createuser -s rails作成をしたユーザーのパスワードは作成されていない点に留意してください。
3.5.3. アプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
Rails アプリケーションをゼロからビルドするには、Rails gem を先にインストールする必要があります。その後に、アプリケーションを作成することができます。
手順
Rails gem をインストールします。
$ gem install rails出力例
Successfully installed rails-4.3.0 1 gem installedRails gem のインストール後に、PostgreSQL をデータベースとして指定して新規アプリケーションを作成します。
$ rails new rails-app --database=postgresql新規アプリケーションディレクトリーに切り替えます。
$ cd rails-appアプリケーションがすでにある場合には
pg(postgresql) gem がGemfileに配置されていることを確認します。配置されていない場合には、gem を追加してGemfileを編集します。gem 'pg'すべての依存関係を含む
Gemfile.lockを新たに生成します。$ bundle installpggem でpostgresqlデータベースを使用するほか、config/database.ymlがpostgresqlアダプターを使用していることを確認する必要があります。config/database.ymlファイルのdefaultセクションを以下のように更新するようにしてください。default: &default adapter: postgresql encoding: unicode pool: 5 host: localhost username: rails password: <password>アプリケーションの開発およびテスト用のデータベースを作成します。
$ rake db:createこれで 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すべての必要なファイルが作成されます。
以下のように
config/routes.rbファイルの 2 行目を編集します。root 'welcome#index'rails server を実行して、ページが利用できることを確認します。
$ rails serverブラウザーで http://localhost:3000 に移動してページを表示してください。このページが表示されない場合は、サーバーに出力されるログを確認してデバッグを行ってください。
3.5.3.2. OpenShift Dedicated のアプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションが OpenShift Dedicated で実行している PostgreSQL データベースサービスと通信するには、config/database.yml の default セクションを編集して、データベースサービスの作成時に後で定義する必要がある環境変数を使用する必要があります。
手順
以下のように事前に定義した変数で、
config/database.ymlのdefaultセクションを編集します。config/databaseYAML ファイルのサンプル<% user = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? "root" : ENV["POSTGRESQL_USER"] %> <% password = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? ENV["POSTGRESQL_ADMIN_PASSWORD"] : ENV["POSTGRESQL_PASSWORD"] %> <% db_service = ENV.fetch("DATABASE_SERVICE_NAME","").upcase %> default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV["POSTGRESQL_MAX_CONNECTIONS"] || 5 %> username: <%= user %> password: <%= password %> host: <%= ENV["#{db_service}_SERVICE_HOST"] %> port: <%= ENV["#{db_service}_SERVICE_PORT"] %> database: <%= ENV["POSTGRESQL_DATABASE"] %>
3.5.3.3. アプリケーションの Git への保存 リンクのコピーリンクがクリップボードにコピーされました!
通常 OpenShift Dedicated でアプリケーションをビルドする場合、ソースコードを git リポジトリーに保存する必要があるため、git がない場合にはインストールしてください。
前提条件
- git をインストールします。
手順
ls -1コマンドを実行して、Rails アプリケーションのディレクトリーで操作を行っていることを確認します。コマンドの出力は以下のようになります。$ ls -1出力例
app bin config config.ru db Gemfile Gemfile.lock lib log public Rakefile README.rdoc test tmp vendorRails app ディレクトリーで以下のコマンドを実行して、コードを初期化し、git にコミットします。
$ git init$ git add .$ git commit -m "initial commit"アプリケーションがコミットされたら、これをリモートリポジトリーにプッシュする必要があります。新規リポジトリーを作成する GitHub アカウントです。
お使いの
gitリポジトリーを参照するリモートを設定します。$ git remote add origin git@github.com:<namespace/repository-name>.gitアプリケーションをリモートの git リポジトリーにプッシュします。
$ git push
3.5.4. アプリケーションの OpenShift Dedicated へのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Dedicated にアプリケーションをデプロイすることができます。
rails-app プロジェクトの作成後、新規プロジェクトの namespace に自動的に切り替えられます。
OpenShift Dedicated へのアプリケーションのデプロイでは 3 つの手順を実行します。
- OpenShift Dedicated の PostgreSQL イメージからデータベースサービスを作成します。
- データベースサービスと連動する OpenShift Dedicated の Ruby 2.0 ビルダーイメージおよび Ruby on Rails ソースコードのフロントエンドサービスを作成します。
- アプリケーションのルートを作成します。
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データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw進行状況を確認します。
$ oc get pods --watch
3.5.4.2. フロントエンドサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを OpenShift Dedicated にデプロイするには、アプリケーションが置かれるリポジトリーを指定する必要があります。
手順
フロントエンドサービスを作成し、データベースサービスの作成時に設定されたデータベース関連の環境変数を指定します。
$ 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 Dedicated は指定された環境変数を使用してソースコードの取得、ビルドのセットアップ、アプリケーションイメージのビルド、新規に作成されたイメージのデプロイを実行します。このアプリケーションには
rails-appという名前を指定します。rails-appデプロイメント設定の JSON ドキュメントを参照して、環境変数が追加されたかどうかを確認できます。$ oc get dc rails-app -o json以下のセクションが表示されるはずです。
出力例
env": [ { "name": "POSTGRESQL_USER", "value": "username" }, { "name": "POSTGRESQL_PASSWORD", "value": "password" }, { "name": "POSTGRESQL_DATABASE", "value": "db_name" }, { "name": "DATABASE_SERVICE_NAME", "value": "postgresql" } ],ビルドプロセスを確認します。
$ oc logs -f build/rails-app-1ビルドが完了したら、OpenShift Dedicated で Pod が実行されていることを確認します。
$ oc get podsmyapp-<number>-<hash>で始まる行が表示されますが、これは OpenShift Dedicated で実行中のアプリケーションです。データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。
実行中のフロントエンドコンテナーから手動で実行する
rshコマンドでフロントエンドコンテナーに exec を実行します。$ oc rsh <frontend_pod_id>コンテナー内から移行を実行します。
$ RAILS_ENV=production bundle exec rake db:migratedevelopmentまたはtest環境で Rails アプリケーションを実行する場合には、RAILS_ENVの環境変数を指定する必要はありません。
- デプロイメント前のライフサイクルフックをテンプレートに追する
3.5.4.3. アプリケーションのルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションのルートを作成するためにサービスを公開できます。
指定するホスト名がルーターの IP アドレスに解決することを確認します。