ruby 書いたり heroku に deploy したりした

久しぶりに ruby ( sinatra ) を書いてみてそのアプリを今更 heroku に deploy してみた。
以下ハマったところとか。

なんか

  • shotgun がオワコンになってた........
    • 最近は sinatra-reloader の方がいいのかな ?
  • warden にハマった............
    • 結局 omniauth だけでやった。

session 周り

sinatra ? のデフォルトのセッションはクッキーに書かれていたので後ろの何かしらのストアに入れたいなぁと思った。
heroku で使えそうなのを見て memcachier に入れるのがいいかなぁという感じだった

require 'rack/session/dalli'
require 'dalli'
require 'memcachier'

use Rack::Session::Dalli, :cache => Dalli::Client.new, :expire_after => 60 * 60 * 24 * 3

という感じで書いた。

Rack::Session::Dalli が割りとよしなに設定を入れてくれちゃうのと、 memcachier を使う場合 heroku 側で MEMCACHIER_PASSWORD, MEMCACHIER_SERVERS, MEMCACHIER_USERNAME という環境変数に入れられるので、
require 'memcachier' した上で Rack::Session::Dalli のバックエンドを明示的に Dalli::Client.new を渡すようにした。
これで、memcachier が Dalli::Client がデフォルトで読み込む環境変数を定義してくれる

twitter とか tumblr の api 叩くのに

TWITTER_CONSUMER_KEY        = ENV["TWITTER_CONSUMER_KEY"]
TWITTER_CONSUMER_SECRET_KEY = ENV["TWITTER_CONSUMER_SECRET_KEY"]

TUMBLR_CONSUMER_KEY         = ENV["TUMBLR_CONSUMER_KEY"]
TUMBLR_CONSUMER_SECRET_KEY  = ENV["TUMBLR_CONSUMER_SECRET_KEY"]

Twitter.configure do |config|
  config.consumer_key    = TWITTER_CONSUMER_KEY
  config.consumer_secret = TWITTER_CONSUMER_SECRET_KEY
end

Tumblife.configure do |config|  
  config.consumer_key    = TUMBLR_CONSUMER_KEY
  config.consumer_secret = TUMBLR_CONSUMER_SECRET_KEY
end

てな感じで consumer_key は先に入れて

Twitter::Client.new(
    :oauth_token        => twitter_access_token,
    :oauth_token_secret => twitter_access_token_secret,
)

みたいな感じでやった。

tumblr は tumblife が良さそうだった。

sinatra から触る session 周り

session[...] を sinatra 側で触ると 2 個しかアクションがないサイトでも気持ち悪くてどうしたものかなーと思ったので

before do
  @user = User.new(session)
end

get '/' do
  @user.is_login?
end

みたいな感じでラップするといいかなと思った。サンプルだとちょくで触ってるのとかが多いように感じたけど、他の人はどうしてるのだろう ?

heroku 周り

foreman で heroku 上で動かすのは Procfile に書いて、手元では memcached とかも立ち上げるので Procfile.dev というのを作った。

foreman start -f Procfile.dev

手元では、heroku 上に定義している環境変数がないので .env にてろてろと書いて、.gitignore に追加した。

なんか

ruby わかってるとよしなに動くし気持ちいしかっこいいけど、はまると気になって色んなところ調べるとここよしなすぎだろ〜みたいな感じがするのとメンテされてない gem に遭遇する確率が高い気がする。
けど、色々試行錯誤して、自分では腑に落ちるところまで考えたり出来たので良かった。