スポンサーリンク

サブディレクトリでsinatraを使ったWebアプリを動かす

etc.imo-tikuwa.comを主にjavascriptやphpの実験スペースのような用途で使用しています。
今回このetcサブドメインの特定のパスへのアクセスが来たときだけrubyのWebアプリにプロキシするという設定を行ってみました。

公開するアプリケーションについて

GitHub:thinreports-line-maker
thinreportsというrubyの帳票出力ライブラリで使用するtlfファイルをブラウザ上で作成するツールです。
PDFダウンロード機能以外はrubyを必要としないため、rubyを使わなくても動作確認が可能な状態にはしています。

先日までは以下のような手順でetcサブドメイン配下で公開していました。

cd /var/www/etc/
git clone https://github.com/imo-tikuwa/thinreports-line-maker
cd thinreports-line-maker/
rm -fR .bundle/
rm -fR .git/
rm -fR .settings/
rm -fR output/
rm -fR server/
rm -f .buildpath .gitignore .project README.md Gemfile Gemfile.lock .ruby_version app.rb
mv public/* .
rm -fR public/
npm ci

gitクローンした後、プロジェクト内の不要なファイルをすべて消しています。
また、/thinreports-line-makerへのアクセスでindex.htmlを表示したいのでpublicディレクトリの中身を1つ上のディレクトリに移動しています。
前述の通りrubyは使わないためbundlerによるライブラリのインストールなどは行っていません。

sinatraアプリの起動スクリプトについて

前回と同様ruby標準のwebrickのサーバーを使用しています。
前回のふるさと納税に関わる申請書を出力するWebアプリを3000番で動かしているのでこちらは3001番にしてみました。

#!/bin/bash

APP_ROOT=$(dirname $(cd $(dirname $0); pwd))
cd $APP_ROOT

start() {
  bundle exec ruby app.rb -o 0.0.0.0 -p 3001 >> $APP_ROOT/log/application.log 2>&1 &
}
stop() {
  killall -9 ruby
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  *)
        echo $"Usage: ./server.sh {start|stop}"
esac

このブログ書いてる最中に気が付きましたがstop関数の処理を修正しないとこのスクリプトでサーバーを停止したときに両方のアプリが落ちてしまう(^q^
rubyと名の付くプロセスではなくポート番号を元にプロセスを取得してkillすればいいような気がする。

2020/01/23追記

起動スクリプト内の停止処理を以下のように修正しました。

lsofでポート番号を元にプロセスを取得→awkでプロセスIDを抽出→killコマンドに渡す

+PORT=3001

stop() {
-  killall -9 ruby
+  lsof -i :$PORT | awk 'NR > 1 {print $2}' | xargs kill -9
}

アプリケーションを稼働させる

git clone https://github.com/imo-tikuwa/thinreports-line-maker
cd ruby-onestop-tokurei-gen/
bundle install --path vendor/bundle
cd public/
npm ci
cd ..
chmod +x ./server/server.sh
./server/server.sh start

nginxに設定を追記

/thinreports-line-makerへリクエストがあった時、3001番ポートで待機しているsinatraアプリケーションへプロキシする設定を追記しています。

server {

~~~省略~~~

+     # display thinreports-line-maker
+     location /thinreports-line-maker/ {
+         rewrite /thinreports-line-maker/(.*) /$1  break;
+         proxy_set_header Host $http_host;
+         proxy_set_header X-Real-IP $remote_addr;
+         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+         proxy_pass http://localhost:3001;
+     }
}

動作確認

https://etc.imo-tikuwa.com/thinreports-line-maker/にアクセス。
「Load tlf」で作成済みのtlfファイルをロード→「Download pdf」でpdfファイルをダウンロードできることを確認。
「Load tlf」で作成済みのtlfファイルをロード→「Download tlf」でtlfダウンロード→Loadの際に指定したtlfファイルと差分ツールで比較を行い同一であることを確認。

その他

サブディレクトリに設置するためjavascriptやcssファイル、ajaxリクエストなどのサブリクエストをすべて相対パスで書かないといけない点は注意が必要。ちょこちょこ直しが発生してしまった(^q^

 

タイトルとURLをコピーしました