9月21日(土)、第31回北海道開発オフに参加しました。
今回も継続的に開発しているWebアプリ実装の続き。
一通り触れるようになっているから、スマホからも動作確認ができるようにPaaSにデプロイしよう、というのがテーマでした。
PagodaBox
今回、デプロイ先としてPagodaBoxを選択しました。
- CakePHP + MySQLでデプロイできる
- とりあえず無料で使える
この条件で検索してヒットしたもののうち、一番情報が多そうだったので。
当日まで、触った事もありませんでした。。。
一筋縄では行かず、結局開発オフ中にデプロイには辿り着けませんでした。
その後、宿題として色々設定をいじって、デプロイに成功したので、そこまでの流れを書いておきます。
Boxfile
PagodaBoxはデプロイ先の環境設定やデプロイ前後の処理をすべて「Boxfile」に記述します。
このファイルがアプリケーションのルートディレクトリにある事をサーバー側が認識し、ファイルを解析しながらデプロイをすすめます。
Boxfileさえきちんと書けていれば、pagodaリポジトリにgit pushしたタイミングで自動ビルド&デプロイしてくれます。
これは簡単!と思っていたのだけど、だけど。
必要な環境設定から何から全てをBoxfileに書かないとデプロイできないのでありました。
このファイルに書くべき内容に躓きまくって開発オフの時間は過ぎていったのであった。
参考:Pagoda Box Help – Understanding the Boxfile
参考:Pagoda Box Help – Cake PHP
試行錯誤して出来上がった今回のBoxfileはこちら。
https://gist.github.com/irasally/6647816
DBのマイグレーションをどう表現するかでひとしきりハマりました。
コマンドを普通に打つと、[Y/n]の入力を求められるのですが、この入力を回避するために(pagodaでのデプロイ中はこちらから何か入力する事はできない)どうすればいいのかというところが一番困った。
こんなやり方初めて知った。
参考:cake schema create without user intervention
printf 'y\ny\n' |app/Console/cake schema create
cakeの設定ファイル
開発用とデプロイ用で設定を変えなければいけないので、Boxfileの中で設定ファイルの差し替えをしています。
- "mv app/Config/core.php.pagoda app/Config/core.php" - "mv app/Config/bootstrap.php.pagoda app/Config/bootstrap.php" - "mv app/Config/database.php.pagoda app/Config/database.php"
一番変更しなければいけなかったのは、キャッシュ設定。
Apc(Alternative PHP Cache)が奨励されているので、それに変更。
core.phpとbootstrap.phpをちゃんと正しい順序で読み込んでいるのかわからなくて試行錯誤した。
(なぜか今はちゃんと動いている、という状態….)
データベース設定
pagodaのMySQLサーバーのデフォルト文字コードがLatin1。
これを変更する事はできないので、テーブル単位で文字コードutf8を再設定。
その他初期データの投入なども行いたいので、mysqlコマンドは直接打ちたい。
pagodaではトンネリングしてDBを使える設定がありました。
参考:Pagoda Box Help – Creating a Secure Database Tunnel from Your Desktop
参考:Pagoda Box Help – UTF-8 encoding in DB
gem pagoda
tunnelコマンドを使うため、pagodaをgem installします。
pagodaはruby2.0だとエラー吐きまくって使えないので注意(2013/09/25時点)。
pagoda -a my-app tunnel db1
でDBへのトンネルが出来上がる。
この状態でmysqlコマンドを打つと自分のマシンから普通にアクセスできた。
この辺りまでやって、ローカルと同じように動くまでになった。
そして初めてスマホからアクセス….!!! 感動した。
今後のやるべきこと
スマホのブラウザだと押せないボタンがある、字がでかすぎる….など、見た目やスタイルを変更しなければいけない箇所が、もう既にわかっています。それ以降の画面に進めない状態なので。
その変更が終わったら、とりあえず実際に使ってみれるのかな。わくわく。
雪が降る前に1回遊んでみたい。がんばろう。
開発オフとしては時間オーバーだったのだけど、新しいサービスの使い方を覚える事ができたので良かった。