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 のインスタンスが実行中であり、利用可能であることを確認してください。さらに、oc CLI クライアントがインストールされており、コマンドがコマンドシェルからアクセスできることを確認し、メールアドレスおよびパスワードを使用してログインする際にこれを使用できるようにします。

3.5.2. データベースの設定

Rails アプリケーションはほぼ常にデータベースと併用されます。ローカル開発の場合は、PostgreSQL データベースを使用します。

手順

  1. データベースをインストールします。

    $ sudo yum install -y postgresql postgresql-server postgresql-devel
  2. データベースを初期化します。

    $ sudo postgresql-setup initdb

    このコマンドで /var/lib/pgsql/data ディレクトリーが作成され、このディレクトリーにデータが保存されます。

  3. データベースを起動します。

    $ sudo systemctl start postgresql.service
  4. データベースが実行されたら、rails ユーザーを作成します。

    $ sudo -u postgres createuser -s rails

    作成をしたユーザーのパスワードは作成されていない点に留意してください。

3.5.3. アプリケーションの作成

Rails アプリケーションをゼロからビルドするには、Rails gem を先にインストールする必要があります。その後に、アプリケーションを作成することができます。

手順

  1. Rails gem をインストールします。

    $ gem install rails

    出力例

    Successfully installed rails-4.3.0
    1 gem installed

  2. Rails gem のインストール後に、PostgreSQL をデータベースとして指定して新規アプリケーションを作成します。

    $ rails new rails-app --database=postgresql
  3. 新規アプリケーションディレクトリーに切り替えます。

    $ cd rails-app
  4. アプリケーションがすでにある場合には pg (postgresql) gem が Gemfile に配置されていることを確認します。配置されていない場合には、gem を追加して Gemfile を編集します。

    gem 'pg'
  5. すべての依存関係を含む Gemfile.lock を新たに生成します。

    $ bundle install
  6. pg gem で postgresql データベースを使用するほか、config/database.ymlpostgresql アダプターを使用していることを確認する必要があります。

    config/database.yml ファイルの default セクションを以下のように更新するようにしてください。

    default: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
      host: localhost
      username: rails
      password: <password>
  7. アプリケーションの開発およびテスト用のデータベースを作成します。

    $ rake db:create

    これで PostgreSQL サーバーに development および test データベースが作成されます。

3.5.3.1. Welcome ページの作成

Rails 4 では静的な public/index.html ページが実稼働環境で提供されなくなったので、新たに root ページを作成する必要があります。

Welcome ページをカスタマイズするには、以下の手順を実行する必要があります。

  • index アクションでコントローラーを作成します。
  • welcome コントローラーの index アクションの view ページを作成します。
  • 作成したコントローラーとビューと共にアプリケーションの root ページを提供するルートを作成します。

Rails には、これらの必要な手順をすべて実行するジェネレーターがあります。

手順

  1. Rails ジェネレーターを実行します。

    $ rails generate controller welcome index

    すべての必要なファイルが作成されます。

  2. 以下のように config/routes.rb ファイルの 2 行目を編集します。

    root 'welcome#index'
  3. rails server を実行して、ページが利用できることを確認します。

    $ rails server

    ブラウザーで http://localhost:3000 に移動してページを表示してください。このページが表示されない場合は、サーバーに出力されるログを確認してデバッグを行ってください。

3.5.3.2. OpenShift Container Platform のアプリケーションの設定

アプリケーションが OpenShift Container Platform で実行中の PostgreSQL データベースサービスと通信できるようにするには、後のデータベースサービスの作成時に定義する必要のある環境変数を使用できるように config/database.ymldefault セクションを編集する必要があります。

手順

  • 以下のように事前に定義した変数で、config/database.ymldefault セクションを編集します。

    config/database YAML ファイルのサンプル

    <% 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 Container Platform でアプリケーションをビルドする場合、ソースコードを git リポジトリーに保存する必要があるため、git がない場合にはインストールしてください。

前提条件

  • git をインストールします。

手順

  1. ls -1 コマンドを実行して、Rails アプリケーションのディレクトリーで操作を行っていることを確認します。コマンドの出力は以下のようになります。

    $ ls -1

    出力例

    app
    bin
    config
    config.ru
    db
    Gemfile
    Gemfile.lock
    lib
    log
    public
    Rakefile
    README.rdoc
    test
    tmp
    vendor

  2. Rails app ディレクトリーで以下のコマンドを実行して、コードを初期化し、git にコミットします。

    $ git init
    $ git add .
    $ git commit -m "initial commit"

    アプリケーションがコミットされたら、これをリモートリポジトリーにプッシュする必要があります。新規リポジトリーを作成する GitHub アカウントです。

  3. お使いの git リポジトリーを参照するリモートを設定します。

    $ git remote add origin git@github.com:<namespace/repository-name>.git
  4. アプリケーションをリモートの git リポジトリーにプッシュします。

    $ git push

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"

3.5.4.1. データベースサービスの作成

Rails アプリケーションには実行中のデータベースサービスが必要です。このサービスには、PostgreSQL データベースイメージを使用します。

データベースサービスを作成するために、oc new-app コマンドを使用します。このコマンドには、必要な環境変数を渡す必要があります。この環境変数は、データベースコンテナー内で使用します。これらの環境変数は、ユーザー名、パスワード、およびデータベースの名前を設定するために必要です。これらの環境変数の値を任意の値に変更できます。変数は以下のようになります。

  • POSTGRESQL_DATABASE
  • POSTGRESQL_USER
  • POSTGRESQL_PASSWORD

これらの変数を設定すると、以下を確認できます。

  • 指定の名前のデータベースが存在する
  • 指定の名前のユーザーが存在する
  • ユーザーは指定のパスワードで指定のデータベースにアクセスできる

手順

  1. データベースサービスを作成します。

    $ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password

    データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。

    -e POSTGRESQL_ADMIN_PASSWORD=admin_pw
  2. 進行状況を確認します。

    $ oc get pods --watch

3.5.4.2. フロントエンドサービスの作成

アプリケーションを OpenShift Container Platform にデプロイするには、アプリケーションが置かれるリポジトリーを指定する必要があります。

手順

  1. フロントエンドサービスを作成し、データベースサービスの作成時に設定されたデータベース関連の環境変数を指定します。

    $ 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 Container Platform は指定された環境変数を使用してソースコードの取得、ビルダーのセットアップ、アプリケーションイメージのビルド、新規に作成されたイメージのデプロイを実行します。このアプリケーションには rails-app という名前を指定します。

  2. 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"
        }
    
    ],

  3. ビルドプロセスを確認します。

    $ oc logs -f build/rails-app-1
  4. ビルドが完了すると、OpenShift Container Platform で Pod が実行されていることを確認します。

    $ oc get pods

    myapp-<number>-<hash> で始まる行が表示されますが、これは OpenShift Container Platform で実行中のアプリケーションです。

  5. データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。

    • 実行中のフロントエンドコンテナーから手動で実行する

      • rsh コマンドでフロントエンドコンテナーに exec を実行します。

        $ oc rsh <frontend_pod_id>
      • コンテナー内から移行を実行します。

        $ RAILS_ENV=production bundle exec rake db:migrate

        development または test 環境で Rails アプリケーションを実行する場合には、RAILS_ENV の環境変数を指定する必要はありません。

    • デプロイメント前のライフサイクルフックをテンプレートに追する

3.5.4.3. アプリケーションのルートの作成

アプリケーションのルートを作成するためにサービスを公開できます。

手順

  • www.example.com などの外部からアクセスできるホスト名を指定してサービスを公開するには、OpenShift Container Platform のルートを使用します。この場合は、以下を入力してフロントエンドサービスを公開する必要があります。

    $ oc expose service rails-app --hostname=www.example.com
警告

指定するホスト名がルーターの IP アドレスに解決することを確認します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.