打倒 WordPress をうたう Ruby 製クラウド用 CMS「Lokka」を Heroku に置いて使っている。
独自ドメインを取ってアクセスできるようにしているのだが、そうなると example.com と example.heroku.com の両方でアクセスできるようになってしまう。example.heroku.com へのアクセスは example.com へリダイレクトしたいので、そのような処理をおこなうプラグインを書いてみました。
これを以下のように public/plugin/lokka-redirect_if_heroku/lib/lokka 以下に置きます。
リダイレクト先は SITE_URL という環境変数で指定できるようにしました。
% heroku config:add SITE_URL=http://example.com
のように heroku コマンドで指定してください。
いくつかポイント。
1) いくつかあるプラグインのサンプルでは def self.registered(app) 以下にたとえば app.get '/hello' do (/hello にアクセスすると hello と表示される)などと書いて、特定の URL にアクセスした場合の挙動を書いてあるものが多い。Rails の before_filter 的な処理はどうやるのだろうと sinatra のドキュメントなどを漁っていたのですが、見よう見まねで app.before で処理を囲んであげたらうまくいきました。
2) redirect_if_heroku.rb 内での module 名を最初、Rails 風に RedirectIfHeroku と書いていたところどうもうまく動かない。lib/lokka/app.rb のプラグインをオートロードしている部分のソースコードを読んでみたところ
register ::Lokka.const_get(name.capitalize)
とあったので、Redirect_if_heroku("redirect_if_heroku".capitalize => Redirect_if_heroku だから)と書き直したところ、うまくプラグインが読み込まれました。 さっそく lokka の最新ソースで、capitalize => camelize に修正されていたので、RedirectIfHeroku というモジュール名で動くようになりました。
3) リダイレクト先は環境変数で設定するようにしましたが、本当は管理画面などから指定できるようにしたい。@komagata さんに今度聞いてみる。
ちなみに Lokka で設置したブログはこちら↓
» エピソード7 | スターウォーズの情報・旬なネタを日本語で届けます
2010/11/02 23:08:46