0. 前提
Sinatra を Apache で動かしていきます。Passenger と Passenger の Apache モジュール自体のインストールは以下の過程を経て終わっているものとします。
# gem install passenger # passenger-install-apache2-module
1. 設定方法(Apache)
1-1. Passenger のモジュール設定を Apache の設定ファイルに書き込む
以下のコマンドを実行して表示された結果をコピーして、Apache の設定ファイルに書き込みます。
# passenger-install-apache2-module --snippet
私が実行した際は上記のコマンドの結果で以下の内容が表示されましたが、ご覧の通り、各種設定やバージョンにより変わりますので、各自のものを用いてください。
LoadModule passenger_module /var/lib/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /var/lib/gems/2.3.0/gems/passenger-5.0.30 PassengerDefaultRuby /usr/bin/ruby2.3 </IfModule>
書き込む対象の Apache の設定ファイルの場所は以下のとおりです*1。
/etc/apache2/apache2.conf
上記ファイルの一番最後に先ほどの内容を貼り付けて保存しましょう。
1-2. Webアプリの場所を Apache の設定ファイルに書き込む
次に Webアプリ の場所(ディレクトリ)を Apache の設定ファイルに書き込んであげます。書き込む対象の Apache の設定ファイルは以下のとおりです*2。
/etc/apache2/sites-available/000-default.conf
まず、「DocumentRoot」の値がデフォルトで「/var/www/html」になっていますので、これを削除するかコメントアウトします。その上で改めて「DocumentRoot」を設定してあげましょう。
このときに注意することがあります。
DocumentRoot に設定する場所は public ディレクトリです
すなわち、アプリのディレクトリ名が「mysinatra」だった場合の DocumentRoot の指定は以下のとおりになります。アプリのディレクトリの場所を /var/www/html/mysinatra として作成している場合です。たとえ public ディレクトリが存在しなくても public ディレクトリを指定しましょう。
DocumentRoot /var/www/html/mysinatra/public
もっとも、どうせ将来的に public ディレクトリは作ることになりますし、存在しないことによる不具合の可能性も考えると、さっさと「# mkdir public」をして作っておくべきだとは思います。中身は空っぽで全く問題ありません。
これで設定ファイル(000-default.conf)を保存しましょう。
1-3. 「config.ru」ファイルを作る
最低限の Sinatra アプリの環境を作った場合、現在は以下のファイルがアプリのフォルダにあるのではないでしょうか。ここで「app.rb」は「/」への GET に対して「Hello, World!」を表示するだけの簡単なテストファイルで(まずは)いいでしょう。
- Gemfile
- Gemfile.lock
- app.rb
Passenger で Sinatra のアプリを動かすためには、「config.ru」というファイルが必要です。以下の内容で「config.ru」というファイルを同じディレクトリ内に作ってあげましょう*3。
require './app.rb' run Sinatra::Application
1-4. Apache を再起動する。
忘れずに Apache を再起動しましょう。
# service apache2 restart
2. URL のルートにアクセスする
例えばローカル開発環境ならば「http://localhost/」にアクセスしましょう。IP アドレス指定でも、ドメインを取得している場合はそのドメインを指定しても、もちろん同じです。
所定のアプリが起動できていれば成功です!
3. 設定が把握できたら
上記の方法は動作するための最低限の内容を標準的な方法で示したものです。より発展的に改修したい場合はそれぞれの設定方法を深く調べてみてください*4。
4. ハマった場合の脱出のコツ
あれもこれもといじくりすぎてしまうと、何が原因で動かない(動くようになった)のかが分からなくなります。面倒でも変更前のファイルや内容は残しておき、変更後と比較できるようにすることが大切です。
5. パーミションが正しくなくてアプリが動かないとき
Passenger は root 権限では動きませんので(「config.ru」の所有者が権限者)、その場合は public ディレクトリの所有者を変更してあげる必要があります。