BayServerでRailsなどのRackアプリケーションを使用する

BayServerのRackサポート

Ruby版BayServerとRails

Ruby版BayServerを開発するにあたっての主なモチベーションは「Railsアプリケーションを効率的に動かす」というところにありました。

Railsアプリケーションは大規模なWebアプリケーションで使用されることも多く、動作も重たくなりがちです。

このため、Ruby界隈では、PassengerやUnicornなど、多くの仕組みが導入され、Railsアプリケーションを効率よく動かせないか試行錯誤されてきました。

ところが、いろいろな仕組みが導入されると、その分インストールするモジュールや設定項目も増え、使用するためのハードルも上がっていきます。

開発時は、”rails s”と打てば簡単に動いていたのに、実際に運用するとなったらその何百倍もの労力がかかって気の遠くなる思いをした、なんて人は大勢いることでしょう笑

BayServer開発者は、「そんなことに労力をとられるのはおかしい!ソフトウェアを動かすということはもっと楽しいことなんだ!」という哲学から、Ruby版BayServerの開発を決断しました。

BayServerはRubyで書かれたハイパフォーマンスなWebサーバーであり、これとRailsが組むことで、BayServer単体で実用的なRailsサービスが立ち上げられるようになったのです。

もうPassengerもUnicornもNginxも必要ありません笑

Rack API サポート状況

前述のように、Ruby版BayServerの開発目的はRailsをサポートするということではありますが、Rails自体はRubyの標準的なRack APIを実装するフレームワークの一つです。

Ruby版BayServerはRack APIをサポートしますので、Rails以外のアプリケーション、例えばShinatraフレームワークや、フレームワークを全く使用しないRackアプリケーションも動かすことができます。

通常、Rackアプリケーションの起動はrackupコマンドを使用して行いますが、BayServerの場合、rackupコマンドでも起動できますし、通常の起動方法でBayServerを起動し、特定のパスに対するアクセスでRackアプリケーションを実行することもできます。

現状、redmineなど主要なアプリケーションで動作確認はしています。ただし、Dockerコンテナでしか配布されておらずしかも中身がNginx+Unicornでガチガチに組まれたものとかは動作させるのが大変困難で四苦八苦しておりますw

もし動いた!動かない!などありましたら、サポートへ報告してもらえるとありがたいです。

Terminalドッカー

BayServerには標準でRackアプリケーションを実行する機能がついていますが、内部的には「ドッカー」と呼ばれる拡張可能な仕組みを用いて実装されています。

つまり、BayServerのコア機能からは切り離されており、使用されない場合は読み込まれないようになっており、無駄なメモリを消費しないように工夫されているわけです。

BayServerでRackアプリケーションを動かすためのドッカーは「Terminalドッカー」になります。特定のパスに対しこのドッカーを起動するようにしておくことで、Rackアプリケーションを実行させることができます。

ところで、この「Terminal」っていう名前ですが、これBayServerでは「最重要ワード」なのでちょっと説明させてください笑

BayServerを動かすということはすなわち、あなただけの港湾を設計し、運用することでしたね。外国から来た船から降りた人たちは電車に乗ってツアーを楽しんで来るということでしたね。

Terminalとは「終着」という感じの意味で、実世界では船から降りて鉄道に乗るところ(またはその逆)の駅なんかをターミナルと言ったりします。Railsアプリケーションがその名の通り「鉄道」だとすると、ほら!「Terminalドッカー」というのは「船」から「鉄道(Rails)」に乗り換える終着駅の役割を果たしているじゃないですか!そう考えるとメッチャワクワクしませんかw

そう、BayServerに何で鉄道が登場するの?っていう疑問は、Railsを知らないと分からないんですw

Rackデモを動かす

BayServerでRackアプリケーションが起動することを確認するためにとりあえずデモを動かしてみましょう。

その前に、rackup packageがインストールされていない場合は先にインストールしておきます。

$ gem install rackup

インストールしたBayServerを起動するとRackアプリケーションのデモへのリンクがあります。

Rack Demosというリンクをクリックします。

これらのRackアプリケーションが動作すれば、Rackアプリケーションを動かすための準備は完了です。

rackupを使ったRackアプリケーションの起動

rackupを使ってBayServerを起動するためには、rackupコマンドがBayServerを認識できるよう環境変数の指定が必要です

具体的には、BayServerをインストールしたディレクトリをBSERV_HOME環境変数に、また、BayServerの使用するライブラリ全てをRUBYLIB環境変数に追加する必要があります。

BayServerの使用するライブラリはBayServerホームのlib/coreおよび、lib/docker以下の全てのディレクトリです。

これらを手動で追加するのは面倒なので、例えば以下のようなスクリプトrackenvを作るとよいでしょう。

export BSERV_HOME={BayServerホームのパス}

export RUBYLIB=${BSERV_HOME}/lib/core

dockers=${BSERV_HOME}/lib/docker

if [ -e $dockers ]; then
  for f in ${dockers}/*; do
    export RUBYLIB=$RUBYLIB:${f}
  done
fi

 スクリプトが作成できたらsouceします。

$ source rackenv

これでアプリケーションのディレクトリ上で rackup コマンドを実行すればOKです。

$ rackup

Railsアプリケーションの場合はrailsコマンドでもよいでしょう

$ rails -s

Terminalドッカーの設定

基本的なTerminalドッカーの設定は以下のようになります。

  [town /]
    [club *]
       docker terminal
       config /home/user/app/config.ru
       environment production

configパラメータにconfig.ruのパスを指定し、environmentに実行環境を指定します。これだけです。

設定したら、通常通りBayServerを起動すると、Rackアプリケーションが使用できます。

現状の制限

現在、起動したBayServerの中ではRackアプリケーションは1つしか動作させることができません。

また、Townもトップ「/」にしておく方が無難でしょう。

Twitterでフォローしよう

おすすめの記事