ruby, rails, sinatra, passenger, bundler, apache |
なんだかPassengerでSinatraやRailsで作ったアプリを動かす設定をしたりしてあげたりすることがおおいのだけど、その都度調べ直してることが多かったのでまとめます。
環境はUbuntu 12.04を標準とします。
$ sudo gem install passenger
これだけだとApacheで動かせないので、モジュールをインストールする。
$ sudo passenger-install-apache2-module
指示にしたがってEnterを押していくと、「必要なライブラリ類が足りないからインストールしろ」と言われたり*1モジュールのビルドが始まったりする。ライブラリ類をインストールしろと言われたら言われた通りのパッケージをaptとかで入れる。きのう新しく立てたUbuntuのホストでやったら以下のパッケージが必要だった。
libcurl4-openssl-dev libssl-dev zlib1g-dev apache2-prefork-dev libapr1-dev libaprutil1-dev
モジュールのビルドが終わるとApacheの設定方法が出てくる。DebianやUbuntuのお作法では、モジュールのロード用のファイルと設定用のファイルを分けてmods-availableディレクトリにそれぞれ保存して、a2enmodで有効化する(mods-enabledディレクトリからシンボリックリンクを張る)みたいなのでそれに従う。
まずpassenger.load
$ sudo vim /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
そしてpassenger.conf
$ sudo vim /etc/apache2/mods-available/passenger.conf
PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.17 PassengerRuby /usr/bin/ruby1.9.1
終わったらa2enmodで有効化してapacheを再起動する。
$ a2enmod passenger $ sudo service apache2 restart
たとえば、 http://hogehoge.死ぬ.jp/*2 にアクセスした場合にSinatraやRailsで書いた(Rackの)アプリケーションが表示されるようにしたいとする。
アプリケーション本体はどこに置いてもいいのだけど、僕はわりと/var/www/サイト名 みたいなところに置いている。普通 /var/www はdefaultのサイトのDocumentRootとして It Works! みたいなHTMLが置いてあるのだけど、これは /var/www/default に移している。今回は /var/www/hogehoge というディレクトリにいろいろ置く。
var/ +-- wwww/ | +-- default/ | +-- index.html +-- hogehoge/ | +-- public/ | +-- tmp/ | +-- logs/ | +-- vendor/ | | +-- bundle/ | ... ...
DebianやUbuntuの場合、モジュールと同じようにVirtualHostごとに設定ファイルをsites-availableディレクトリに入れてa2ensiteで有効化するという手順を踏むのがお作法っぽい。そこでとりあえず sites-available/hogehoge というファイルに hogehoge.死ぬ.jp での設定を記述する。
$ sudo vim /etc/apache2/sites-available/hogehoge
<VirtualHost *:80> ServerAdmin hogehoge@example.com ServerName hogehoge.xn--s9j219o.jp DocumentRoot /var/www/hogehoge/public CustomLog /var/log/apache2/access-hogehoge.log combined ErrorLog /var/log/apache2/error-hogehoge.log LogLevel warn SetEnv GEM_HOME /var/www/hogehoge/vendor/bundle/ruby/1.9.1 <Directory /var/www/hogehoge/public> Options -Multiviews AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
ここでのポイントは、
$ bundle install --path vendor/bundle
$ GEM_HOME=vendor/bundle gem install your-gem
あと、特定のディレクトリの下で(たとえば http://hogehoge.死ぬ.jp/myapp/)でRackアプリを動かしたい場合は<VirtualHost>内に以下のようにRackBaseURIを追加する。
RackBaseURI /myapp
設定が終わったらapacheを再起動する。これでちゃんとアプリが動けばOK。bundlerを使っている場合はbundler自身がGemfileに書かれていないとGEM_HOMEにインストールされておらずrequireできなかったりするので注意。
*1:英語で
*2:日本語ドメインなので、設定するときは http://hogehoge.xn--s9j219o.jp/ というURLを使う