Red Hat Training

A Red Hat training course is available for OpenShift Online

2.8. Ruby

2.8.1. 概要

OpenShift Online には、Ruby アプリケーションのビルドおよび実行用に S2I が有効な Ruby イメージが含まれています。Ruby S2I ビルダーイメージは、必要な依存関係を使用してアプリケーションソースを組み立てて、Ruby アプリケーションを含む新規イメージを作成します。結果として生成されるイメージは、OpenShift Online または Docker のいずれかで実行できます。

2.8.2. バージョン

現時点で、OpenShift Online は Ruby のバージョン 2.02.2、および 2.3 を提供しています。

2.8.3. イメージ

RHEL 7 イメージは、Red Hat レジストリーから入手できます。

$ docker pull registry.access.redhat.com/openshift3/ruby-20-rhel7
$ docker pull registry.access.redhat.com/rhscl/ruby-22-rhel7
$ docker pull registry.access.redhat.com/rhscl/ruby-23-rhel7

このイメージは、ruby イメージストリームで使用することができます。

2.8.4. ビルドプロセス

S2I は、ソースコードをコンテナーに挿入し、コンテナーにソースコードの実行を準備をさせることで、実行準備が整ったイメージを生成します。S2I では、以下の手順を実行します。

  1. ビルダーイメージからコンテナーを起動します。
  2. アプリケーションソースをダウンロードします。
  3. ビルダーイメージコンテナーにスクリプトとアプリケーションソースをストリーミングします。
  4. (ビルダーイメージから) assemble スクリプトを実行します。
  5. 最終的なイメージを保存します。

ビルドプロセスの詳細のまとめについては、「S2I ビルドプロセス」を参照してください。

2.8.5. 設定

Ruby イメージは多数の環境変数を複数サポートし、環境変数を設定することで Ruby のラインタイムの設定や動作を制御できます。

イメージの一部としてこれらの環境変数を設定するには、ソースコードリポジトリーの中にある .s2i/environment ファイル に配置するか、ビルド設定の sourceStrategy 定義の環境セクションに定義します。

また、新規アプリケーションの作成時に既存のイメージを使用するか、デプロイメント設定などの既存のオブジェクトの環境変数を更新して環境変数を設定できます。

注記

ビルドの動作を制御する環境変数は、s2i ビルド設定または .s2i/environment ファイルの一部として設定して、ビルドの手順で利用できるようにする必要があります。

表2.10 Ruby 環境変数

変数名説明

RACK_ENV

この変数は、Ruby アプリケーションがデプロイされる環境を指定します (例: productiondevelopment、または test)。それぞれのレベルでは、ロギングの省サイド、エラーページ、および ruby gem インストールの点で動作が異なります。ロギングの詳細レベル、エラーページ、Ruby gem インストールなど、レベルごとに動作が異なります。 アプリケーションのアセットは、RACK_ENVproduction に設定されている場合にのみコンパイルされます。 デフォルト値は production です。

RAILS_ENV

この変数は、Ruby on Rails アプリケーションがデプロイされる環境を指定します (例: productiondevelopment、または test)。それぞれのレベルでは、ロギングの省サイド、エラーページ、および ruby gem インストールの点で動作が異なります。アプリケーションのアセットは、RAILS_ENVproduction に設定される場合にのみコンパイルされます。この値は、デフォルトで ${RACK_ENV} に設定されます。

DISABLE_ASSET_COMPILATION

この変数は true に設定されている場合には、アセットのコンパイルプロセスを無効にします。アセットのコンパイルは、アプリケーションが実稼働環境で実行されている場合にのみ行われます。そのため、アセットがコンパイル済みの場合は、この変数を使用できます。

PUMA_MIN_THREADSPUMA_MAX_THREADS

この変数は、Puma のスレッドプールで利用可能な最小および最大スレッド数を指定します。

PUMA_WORKERS

この変数は、Puma の クラスターモード で起動されるワーカープロセスの数を示します (Puma が 3 つ以上のプロセスを実行する場合)。明示的に設定されていない場合には、デフォルトの動作で PUMA_WORKERS が、コンテナーで利用可能なメモリーや、ホスト上のコア数に適した値に設定されます。

RUBYGEM_MIRROR

ビルドプロセス時に必要な gem パッケージをダウンロードするための、カスタムの RubyGems ミラー URL を使用するようにこの変数を設定します。注意: この環境変数は、Ruby 2.2+ イメージでのみ利用可能です。

2.8.6. ホットデプロイ

ホットデプロイでは、新しい S2I ビルドを生成する必要なしに、アプリケーションに変更をすばやく加え、デプロイすることができます。このイメージでホットデプロイメントを有効にする方法は、アプリケーションの種類により異なります。

Ruby on Rails アプリケーション

Ruby on Rails アプリケーションの場合は、RAILS_ENV=development 環境変数を実行中の Pod に渡して、ビルド済みの Rails アプリケーションを実行します。既存のデプロイメント設定では、oc set env コマンドを使用してください。

$ oc set env dc/rails-app RAILS_ENV=development

他のタイプの Ruby アプリケーション (Sinatra、Padrino など)

他のタイプの Ruby アプリケーションでは、アプリケーションは実行中のコンテナー内でソースコードが変更されるたびに、サーバーを再読み込みできる gem でビルドする必要があります。これらの gem には以下が含まれます。

開発モードでアプリケーションを実行できるようにするには、選択した gem で Web サーバーを起動し、ソースコードへの変更の有無を確認するように、S2I run スクリプト を変更する必要があります。

カスタマイズした S2I run スクリプト でアプリケーションをビルドした後に、RACK_ENV=development 環境変数でイメージを実行します。たとえば、oc new-app コマンドを参照してください。oc set env コマンドを使用して、既存オブジェクトの環境変数を更新できます。

警告

このオプションは、開発またはデバッグの時にだけ使用するようにしてください。 実稼働環境でこの設定をオンにすることは推奨しません。

実行中の Pod でソースコードを変更するには、oc rsh コマンドを使用して、コンテナーに入ります。

$ oc rsh <pod_id>

実行中のコンテナーに入った後に、現在のディレクトリーを、ソースコードが配置されている /opt/app-root/src に設定します。

2.8.7. Ruby テンプレート

OpenShift Online には、サンプル Rails アプリケーションをデプロイするためのテンプレートサンプルが含まれています。このテンプレートは、ストレージの永続ボリュームを使用して PostgreSQL データベースを含む Ruby 2.3 のサンプルアプリケーションをビルドし、デプロイします。

サンプルアプリケーションは、以下のコマンドで rhscl/ruby-23-rhel7 イメージを使用してビルドし、デプロイできます。

$ oc new-app --template=rails-pgsql-persistent