2010-09-21 (火) [長年日記]
_ Debian + Passenger + Rack + tDiary
Debian lenny上で、Passengerを使ってtDiaryを動かしてみるテスト。tDiaryは3.0.1を使う。
以下、DocumentRootは /var/www、tDiaryは /home/tdiary にインストールされているものとする。
PassengerとRackのインストール
ここはDebianらしくaptでインストールする。
まず、apt-lineに以下を追加。
deb http://www.backports.org/debian lenny-backports main contrib non-free
次にapt-getでインストール。
# apt-get update # apt-get -t lenny-backports install librack-ruby # apt-get -t lenny-backports install libapache2-mod-passenger
tDiaryをRackで動かす
http://github.com/hsbt/tdiary/tree/master/core/ から、以下のファイルをコピー。
- config.ru
- tdiary_app.rb
- tdiary/dispatcher.rb
- tdiary/response_helper.rb
これらのファイルは /home/tdiary 以下に配置する。
次に、tdiary_app.rbに以下のパッチを適用する。
--- tdiary_app.rb.orig 2010-09-21 03:28:03.000000000 +0900 +++ tdiary_app.rb 2010-09-21 02:06:44.000000000 +0900 @@ -13,6 +13,14 @@ alias :env_table_orig :env_table alias :env_table :env_table_rack + + module QueryExtension + def script_name + r = env_table['SCRIPT_NAME'] + env_table['PATH_INFO'] + r << 'index.rb' if r[-1] == ?/ + r + end + end end module Rack
この時点で、rackup config.ru でそれなりに動くはず。
Passengerの設定
以下のディレクトリを作成。
$ mkdir /home/tdiary/public $ mkdir /home/tdiary/tmp
静的ファイルはpublicにリンクを張る。
$ cd /home/tdiary/public $ ln -s ../index.rdf . $ ln -s ../no_comments.rdf . $ ln -s ../sitemap.xml . ……等々、必要なだけ作成する。
次に /etc/apache2/sites-available/hoge に以下の設定を追加。
PassengerUserSwitching off # お好みで PassengerDefaultUser www-data # お好みで RackBaseURI /diary
最後にPaasenger用のリンクを作成。
$ ln -s /home/tdiary/public /var/www/diary
Passengerを動かしてみる
# /etc/init.d/apache2 restart
で、http://hoge.example.com/diary/ にアクセスすれば日記が表示されるはず。この日記も9/21現在Passengerで動いている。
まだ時々エラーで落ちることがあるけど、追いきれないので今日はここまで。
既知の問題としては以下のような感じ。
- /diary/aaa などの存在しないファイルへのリクエストでも日記が表示される。
- /diary → /diary/ のリダイレクトが行われない。
- google_sitemaps.rbなどのENVを直接参照しているプラグインが動かない。
オマケ:.htpasswd対応
このままでもBasic認証には対応しているが、config.ruに平文パスワードを書かなければならないので、.htpasswdに対応させる。
--- config.ru.orig 2010-09-21 03:28:28.000000000 +0900 +++ config.ru 2010-09-21 02:21:52.000000000 +0900 @@ -1,3 +1,4 @@ +require 'webrick' require 'tdiary_app' use Rack::ShowExceptions @@ -17,8 +18,10 @@ end map "/update.rb" do + htpd = WEBrick::HTTPAuth::Htpasswd.new( '.htpasswd' ) use Rack::Auth::Basic do |user, pass| - user == 'user' && pass == 'pass' + hp = htpd.get_passwd(nil, user, false) + hp == pass.crypt( hp[0,2] ) if hp end run Rack::TDiaryApp.new(:update)
_ NTTドコモ、バッファロー製モバイルWi-Fiルーター「BF-01B」を25日発売
モバイルルータはわりとどうでもいいのだが、公衆無線LAN1年間無料が地味に嬉しい。でも自分が対象なのかがわからない。
現在は http://github.com/tdiary/tdiary-core/tree/testable で作業しているので、そちらで試して頂ければと思います。<br><br>あと、近々 master に取り込むつもりですので、動作させておかしい部分は報告か、github にアカウントがあるならば contributor に追加しますのでよろしくお願いします。
なるほど。さっそくtestableで試してみたいと思います!