勤務先の paperboy が PaaS の sqale をリリースしたみたいなので、早速 tDiary を動かしてみました。
以下手順。
$ git clone git://github.com/tdiary/tdiary-core.git
$ cd tdiary-core
$ git checkout -b sqale
まず、.gitignore から tdiary.conf の行を削除して tdiary.conf ファイルを雛形からコピーします。
$ cp tdiary.conf.heroku tdiary.conf
tdiary.conf の中の @style を GFM から Wiki に変更します。なぜなら sqale では libffi が使えないからです。そのうち使えるようになると思います。多分。
次に、.env ファイルに必要な環境変数 DATABASE_URL
を書き込みます。.env はいわゆる heroku config:add var1=foo
的な奴なので、必要に応じてどんどん増やすことが出来ます。DATABASE_URL
の値はダッシュボードのアプリケーション詳細 > データベース接続情報 に書いてある値を用います。
DATABASE_URL=mysql://username:password@hostname/databasename
続いて、Gemfile を sqale 用に編集します。とりあえず pg と thin をコメントアウトして mysql のコメントアウトを外せば動きます。必要ない dalli や redcarpet 関連は使わないので、気持ち悪い場合はコメントアウトしておきます。
認証時に使用するパスワードファイルを作ります。machu さんが作ってくれた rake task を使うと便利です。
$ rake auth:password:create
デフォルトのテーマが素っ気ない場合は https://github.com/tdiary/tdiary-theme から格好いい奴を theme フォルダの下にまるっとコピーします。例えば gustav を使いたい場合は
$ git clone git://github.com/tdiary/tdiary-theme.git
$ cp -r tdiary-theme/gustav theme
$ rm -rf tdiary-theme
という感じです。作業ディレクトリとかは適当に読み替えてください。
sqale は heroku と違って、最初にロードバランサとして ELB, コンテナ毎に nginx と unicorn が動く仕組みなので、assets を nginx から見えるように配置する必要があります。Rails は public 配下を上手いことやってくれるので必要ありませんが、tDiary は上手いことやってくれないので手でコピーする必要があります。
こんな事もあろうかと rake assets:copy
というタスクを作っておきました。これを実行すると public/assets の下に必要なファイルが良い感じにコピーされます。このタスクの FileTest が無駄と怒られたのは後で直しておきます。
ここまで出来たところで sqale の git url をリモートブランチとして登録します。この値はダッシュボードのアプリケーション詳細に書いてあります。
$ git remote add sqale ssh://sqale@gateway.sqale.jp:2222/hsbt/tdiary.git
プッシュします。
$ git push sqale sqale:master
sqale ではデータベースを操作する時は ssh でログインして実行する必要があります。この辺は画面から操作できるように、そのうち楽になるかもしれません。ssh は port 2222 なので以下のように ssh にオプションを付けてログインします。
$ ssh -p 2222 sqale@gateway.sqale.jp
複数のコンテナを有効にした状態でログインすると、コンテナの選択メニューが出ます。今回は共用のデータベースを変更したいので適当なコンテナを選択します。
ログイン後に current ディレクトリに移動してから環境変数 DATABASE_URL
と RACK_ENV
をシェルに設定します。
$ export DATABASE_URL=mysql://username:password@hostname/databasename
$ export RACK_ENV=production
RACK_ENV を指定しているのは、こうしないと sequel が require されないから。この辺はもう少し洗練させないとなあ。とりあえず設定後にデータベースを作成する
$ bundle exec rake db:create
最後に nginx と unicorn を再起動
$ /etc/init.d/app restart
今のところ sqale のコンテナ間で tDiary のキャッシュを共有する仕組みがないので、複数のコンテナを使おうとすると日記やコメントの内容がちぐはぐになってしまうけど、その辺はご愛敬。memcached とかに入れないとダメなんだろうけど、その辺の機能は正式リリース時には追加されるんじゃないかな。
sqale は VPS と Heroku の間をターゲットにした、ちょっと変わった PaaS なので、試してやるぜという方がいたらクローズドβの追加募集に申し込んでみてください。