鳥小屋.txt

主に自作ゲームをつくったりしているよ。制作に関することやそうじゃないことのごった煮ブログ

Sinatra/Sequelで誰得WebサービスをつくったのでHerokuに投げつけてみた


3.5ヶ月ぶりにRuたんが帰ってきた!!
毎年、夏場は恒例なんです。。。

つくったもの

「すぐTL取得制限に引っかかるからTwitter API 1.1はクソ」というサービスです。

「すぐTL取得制限に引っかかるからTwitter API 1.1はクソ」は、
Twitterクライアントを使っているときにTL取得制限に引っかかって、
「あー、すぐTL取得制限に引っかかるからTwitter API 1.1はクソだなぁ」と思った際に
1ボタンで「すぐTL取得制限に引っかかるからTwitter API 1.1はクソ」とツイートできるサービスです。
実際はログイン→ツイートなので2ボタンです。TwitterのOAuthぼボタンもあるので3ボタンです。
とってもクソサービスですね。誰得。僕が使います。

つらみ

サービス自体は見ればわかる通りksサービスなので簡単に作れました。
いつもだったら自分のサーバにポイっと投げてthinあたりで動かしてしまうのですが、
どうせだったらHerokuにデプロイしてみようかなと思いました。
ほら、Herokuにデプロイしました(キリッってかっこいいじゃん。
Heroku自体、サイトが厨二心くすぐるダークサイドな感じだし。

しかしそれがつらみどっとこむだった。

ここは流れで

つくったアプリのディレクトリでコマンド叩く。

$ heroku apps:create アプリ名
Creating アプリ名... done, stack is cedar
http://アプリ名.herokuapp.com/ | git@heroku.com:アプリ名.git


と、サイトのURLとgitのリポジトリが作成されるので、
つくったアプリをリポジトリにpushすればHerokuでのデプロイは完了です。
なにこれチョー簡単じゃん!!!
とおもった。

問題点1:データベース

SQLite3使ってたんだけどHerokuではダメだった。
Herokuの標準データベースはPostgreらしい。
でも僕、Postgre使ったこと無いよ……こわい><

ので、無料のアドオンでMySQLを使う。

$ heroku addons:add cleardb:ignite
$ heroku config
=== sugutl Config Vars
CLEARDB_DATABASE_URL: mysql://〜〜〜〜〜〜


このmysql://〜〜〜〜に接続するように設定すればいいらしい。
ちょー余裕じゃん!!

動かなかった。

問題点2:Sequel

Sequelのモデルクラス内でテーブルが定義されてなかったら、
カラムを作成するようにしてたんだけど、テーブルが作れなくてなんか死んでる。
もしかしたら定義の仕方がよくないのかもしれない。

マイグレーションにすればかっこいい感じで問題解決できそうなので、
Sequelのマイグレーションファイルを作る。
といっても自分で書くのは面倒すぎるので今のローカルのデータベースから生成。

$ bundle exec sequel -d "sqlite://db/sugu.sqlite3" > migrate/001_create_table.rb 


できた。これをHerokuで実行する。

$ bundle exec sequel -m migrate "mysql://〜〜〜〜" -E 


コケないで通った!! 頑張ったよ!


頑張れてなかった

問題点3:gem 'mysql'

ログを見るとTimestampなカラムにデータを入れるときに
parseメソッドが「こんなのパースできないよー」とエラー吐いて落ちてる。
カラムの定義がおかしいのかとか、Modelが間違ってるのかとか、
変なデータを投入させてるんじゃないかとか悩んだけど、意味不明。。。

試しにローカルでMySQL立ててつないでみたら同じエラーが出たので、
どうもSQLite3とMySQLでなんか違う感なの? いや、でもそんなところで引っかかるはずは……

そしていろいろ調べていたら、どうもMySQLを扱うgemは
mysqlではなくmysql2を使ったほうがいいっぽい?

そしてgemをmysql2に変えてみたら動いた。なんだったんだ。。。。
ここまで苦戦するならPostgresのままでよかった感ある。

結果として

開発よりデプロイのほうが大変だった。
まぁ慣れない環境だからってのはあるんですが。。。

でも、使い慣れてしまえばHerokuさんすごいなー。
全部自分のサーバで動かしてるとリソースがガリガリ食われてしまうので
なんかクソサービスを作って動かすのに抵抗あるんですよね。
この他人にゴミを押し付けてる感じがサイコーですね!111

いつかまともなもの動かしてあげよう。
いや、でもまともなものなら自分のサーバで(ry