あっかぎのページ

Sinatra on Apache

20150325_1

sinatraをapache上で動かすお話

以前、Sinatraを利用してデータをグラフ化するお話を書きました。

普段、コマンドラインで$ ./xxx.rbという感じで実行&ブラウザでアクセスしていたのですが、ツールの数だけ起動するのも面倒くさくなっていました。そこに、先日のRedmineを導入する時に気が付いたのですが「Rails上のアプリをapacheで動作できるならSinatraも同じようにできない?」と思ったのがきっかけです。

調べてみるとRedmineで導入したpassengerを利用することで、Apache上でSinatraも動作できるようになりました。

手順

passengerを導入済みとして進めます。passengerの導入はRedmine導入で紹介しました。

  1. Sinatraの設定
  2. Apacheの設定

Sinatraの設定

Sinatraのファイル構成を次のようにします。

sample/
- config.ru
- myapp.rb
- public/
- tmp/

myapp.rbはアプリの実体です。そして、config.ruが設定ファイルとなります。publicとtmpは空のフォルダでOKです。

myapp.rbの中身は例として次のようにしておきます(実際は自分のアプリになります)。

require 'sinatra'

get '/' do
'hello myapp'
end

config.ruは次のように設定を記述して、myapp.rbを指定するようにしておきます。

require File.expand_path(File.dirname(__FILE__)) + '/myapp'
run Sinatra::Application

ちなみに、tmp以下にalways_restart.txtと空ファイルを置くことで自動でリロードできるようです。(本来はmyapp.rb編集してもApacheを再起動しないと編集が繁栄されません※sinatra/reloaderの機能相当を実装できます)

以上でSinatra側の準備が完了しました。

Apacheの設定

passengerが動く前提とします。passengerの導入がまだの場合はRedmine導入をご参考ください。

ここでは、http://192.168.xxx.yyy/sample/でアクセスするとします(/var/www/が公開フォルダ)。

まずは、先ほどのSinatraアプリをApacheの公開フォルダにリンクを貼ります(Apacheのwww-dataがアクセス権限あるとして)。

$ ln -s /home/pi/sample/public /var/www/sample

Apacheで編集するファイルは/etc/apache2/sites-available/defaultです(Raspberry Pi(Debian)の場合)。Sinatraで公開するフォルを下記のように追記します。

...

RailsBaseURI /sample
PassengerResolveSymlinksInDocumentRoot on

...

上記の内容をApacheの設定ファイルとして編集して、再起動します。

$ sudo vi /etc/apache2/sites-available/default
$ sudo service apache2 restart

以上で設定が終わりました。ブラウザで次のアドレスにアクセスしてみましょう(ApacheのRootをhttp://192.168.xxx.yyy/とします)。

http://192.168.xxx.yyy/sample/

従来通りの動作となれば設定完了です。(この例では’hello myapp’が表示されます)

おわりに

2,3自作のSinatraアプリがあったのですが、毎回コマンドラインから起動するのが面倒くさくなっていました。今回の方法でApache上で動作ができるようになったので、この手間が省けて便利になりました。

Raspberry Piという遅いコンピューターなので起動が遅いのですが、それでも十分実用範囲で使えています。

ApacheのRoot(/var/www)にindex.htmlで各アプリのメニューをリンク(<a href="./sample/">sample</a>)で貼っておくことで、トップへアクセスすればいろいろアプリを選択/動作できるようになって便利になりました。

参考