今朝のメールフォームをHerokuで動くように変更した。
http://sinatra-liaison.herokuapp.com/
データベースへの保持をしなくなったので、Herokuにかんして特につまずくことはなかった。
CGIとSinatra間でのちょっとした違いでちょっと時間がかかった。
CGIとSinatraでのパラメーターの扱いのちがい
チェックボックスは配列としてうけとるのだが、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を生成するだけになった。
割と小奇麗になった
まだまだ甘いところもあるが、作成開始日のあの雑然とした感じに比べればかなり綺麗になった。