2020年9月4日金曜日

Sinatra を Passenger 上で動作させてみた

概要

Passenger と Sinatra を連携させてみました
Sinatra アプリに来る前段で何か管理や処理をしたいことがある場合に使えるテクニックかなと思います

環境

  • macOS 10.15.6
  • Ruby 2.7.1p83
    • passenger 6.0.6
    • sinatra 2.0.8.1

Sinatra アプリの準備

  • bundle init
  • vim Gemfile
gem "sinatra"
  • bundle install
  • vim app.rb
require 'sinatra/base'

class MyApp < Sinatra::Base
  get '/' do
    'ok'
  end
end
  • vim config.ru
require './app'
run MyApp
  • bundle exec rackup config.ru

これで localhost:9292 で Webrick が動作してアプリにアクセスできます

Passenger 上で動作させる

厳密に言うと Passenger 上で動作させるわけではなく Passenger 経由で Webrick のアプリにアクセスするようになります

  • vim Gemfile
gem "passenger"
  • bundle install
  • vim config.ru
require './app'
require "phusion_passenger/rack_handler"
run MyApp
  • bundle exec passenger start

と実行すると localhost:3000 が起動してこれを経由して localhost:9292 にアクセスするようになります

Passenger を経由することで pid ファイルや log ファイルがカレントディレクトリに生成されるようになります
ちなみにログファイルの名前は --log-file オプションでポート番号は --port で変更できます

Passenger のカスタマイズ

Passenger をカスタマイズするには Passengerfile.json というファイルを作成しそこに設定を記載することでカスタマイズできます

  • vim Passengerfile.json
{
  "port": 4000,
 "log_file": "awesome.log",
  "environment": "staging"
}

例えば上記の場合だとログファイル名が awesome.log になり Passenger の動作ポートが 4000 番になります
すべての設定は先程紹介したようにオプションでも設定できます

他にも多くの設定があります
すべての設定は公式の Configuration reference
が参考になります

最後に

Sinatra と Passenger を連携させてみました
所謂 Web サーバやリバースプロキシ的な役割になるので Web アプリの前段で何か処理をさせたい場合などに使えると思います
またリクエストのロギングなどを更に詳細にしたい場合などにも使えると思います
Passenger 自体にはローリングアップデートやスロットリングの機能もあるのでそういったことをアプリでしないで Passenger に任すこともできると思います

参考サイト

0 件のコメント:

コメントを投稿