僕は発展途上技術者

Ruby 製クラウド用 CMS「Lokka」のプラグイン Redirect_if_heroku を書いてみた

打倒 WordPress をうたう Ruby 製クラウド用 CMS「Lokka」を Heroku に置いて使っている。


独自ドメインを取ってアクセスできるようにしているのだが、そうなると example.com と example.heroku.com の両方でアクセスできるようになってしまう。example.heroku.com へのアクセスは example.com へリダイレクトしたいので、そのような処理をおこなうプラグインを書いてみました。



これを以下のように public/plugin/lokka-redirect_if_heroku/lib/lokka 以下に置きます。


TextMate
Uploaded with Skitch!

リダイレクト先は 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 | スターウォーズの情報・旬なネタを日本語で届けます


プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ