Sinatraの書き方にはClassic StyleとModular Styleという2種類があります。
- Classic Style
require 'sinatra'
get '/' do
"Hello World!"
end
- Modular Style
require 'sinatra/base'
class App < Sinatra::Base
get '/' do
'Hello world!'
end
end
Passengerで公開する場合、Classic Styleはドキュメントが結構あったのですが、Modular Styleの場合はあまり資料がなかったのでまとめました。(公式のドキュメントもよく見ると書いてあるのですが、わかりづらい)
PassengerがApacheで有効になっていることが前提です。
作成するのは以下のファイルです。
root/
├── app.rb
├── config.ru
├── public/(空でOK)
└── tmp/(空でOK)
config.ruには以下のように記述します。
require File.expand_path(File.dirname(__FILE__)) + '/app'
run App
ファイル更新があるたびにアプリケーションの再読み込みを行う必要があれば、tmp/
にalways_restart.txt
をいれてください。
あとは、Apacheの設定でDocumentRootをpublicにすればOKです。
<VirtualHost *:80>
ServerName app.local
DocumentRoot "/path/to/public"
<Directory "/path/to/public">
Order allow,deny
Allow from 127.0.0.1
</Directory>
</VirtualHost>
これで、http://app.local
からSinatraアプリケーションにアクセスできます。
ちなみに、Classic Styleのときは、config.ruの中身が
require File.expand_path(File.dirname(__FILE__)) + '/app'
run Sinatra::Application
となります。