今朝のメールフォームをHerokuで動くように変更した。

今朝のメールフォームをHerokuで動くように変更した。

http://sinatra-liaison.herokuapp.com/

github.com

データベースへの保持をしなくなったので、Herokuにかんして特につまずくことはなかった。

CGISinatra間でのちょっとした違いでちょっと時間がかかった。

CGISinatraでのパラメーターの扱いのちがい

チェックボックスは配列としてうけとるのだが、CGIライブラリはname="hobby"複数選択で配列扱いになる一方で、Sinatraではname="hobby[]"のように明示的に配列であることを示さなくてはならない。

CGIでの値の扱いにはクラスを用意していたので、name="hobby[]"で統一しておいて、CGIで動くときは[]を消すことにした。

ActiveRecordからActiveModelへ

最初に思いついた、動的にattributesとvalidatorを追加するという案に固執していたので、サーバー上のデータを確認する方法もないのにDBに保存していた。

バリデーションを適切に行うだけならActiveModelを用いればよい、と割りきってフォームの内容の保持はやめて全てメールで飛ばすようにした。

CGIの立ちあがりも0.2秒ほど早くなった気がする。

トークンの掃除はDyno更新まかせ

ポスト時の確認用トークンの保持は巣のファイルで行い、送信成功時の掃除の他にはなにもしていないのでどんどんたまる。

Dyno更新時にまっさらになるのにおまかせといったところだが、CGI動作時のことが考慮されていない。

ビューからCGI.outを外に出す

仕事の分離ということで、最終的なレンダリングCGIではapp.rbが、HerokuではSinatraがそれぞれ行い、ビューはHTMLを生成するだけになった。

割と小奇麗になった

まだまだ甘いところもあるが、作成開始日のあの雑然とした感じに比べればかなり綺麗になった。