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.0、2.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 では、以下の手順を実行します。
- ビルダーイメージからコンテナーを起動します。
- アプリケーションソースをダウンロードします。
- ビルダーイメージコンテナーにスクリプトとアプリケーションソースをストリーミングします。
- (ビルダーイメージから) assemble スクリプトを実行します。
- 最終的なイメージを保存します。
ビルドプロセスの詳細のまとめについては、「S2I ビルドプロセス」を参照してください。
2.8.5. 設定
Ruby イメージは多数の環境変数を複数サポートし、環境変数を設定することで Ruby のラインタイムの設定や動作を制御できます。
イメージの一部としてこれらの環境変数を設定するには、ソースコードリポジトリーの中にある .s2i/environment ファイル に配置するか、ビルド設定の sourceStrategy 定義の環境セクションに定義します。
また、新規アプリケーションの作成時に既存のイメージを使用するか、デプロイメント設定などの既存のオブジェクトの環境変数を更新して環境変数を設定できます。
ビルドの動作を制御する環境変数は、s2i ビルド設定または .s2i/environment ファイルの一部として設定して、ビルドの手順で利用できるようにする必要があります。
表2.10 Ruby 環境変数
| 変数名 | 説明 |
|---|---|
|
|
この変数は、Ruby アプリケーションがデプロイされる環境を指定します (例: |
|
|
この変数は、Ruby on Rails アプリケーションがデプロイされる環境を指定します (例: |
|
|
この変数は |
|
| この変数は、Puma のスレッドプールで利用可能な最小および最大スレッド数を指定します。 |
|
|
この変数は、Puma の クラスターモード で起動されるワーカープロセスの数を示します (Puma が 3 つ以上のプロセスを実行する場合)。明示的に設定されていない場合には、デフォルトの動作で |
|
| ビルドプロセス時に必要な 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