unicornとunicorn_railsのオプションの違い
unicornとunicorn_railsはほとんど同じ挙動をして、
application serverを立ち上げてくれますが、一部オプション指定の意味が違います。
ちょっとハマったので書いておくことにします。
結論
unicornのオプション-EはRACK_ENVを設定unicorn_railsのオプション-EはRAILS_ENVを設定
参考: http://unicorn.bogomips.org/
経緯1
Capistrano 3を導入しまして、unicornを使っていたので無邪気に
を使っていました。(僕の環境では0.3.2) 普通に動かしていたんですが、muninがunicornのmemory statusをうまく取得できていないようでした。
該当のmuninのplugin
pluginに目をちゃんと通すとわかるんですが、
def memory_usage
result = { :master => {master_pid => nil}, :worker => {} }
ps_output = `ps auxw | grep unicorn_rails`
ps_output.split("\n").each do |line|
なるほど。unicorn_railsでgrepしてます。
ということで、よく調べてみると、sepastian-capistrano3-unicornのデフォルトでは
unicornを使ってunicornプロセスを起動していて、このままではこのunicorn_memory_status
に引っかからないわけです。
ということで、unicorn立ち上げをunicorn_railsを通して実行する必要があるわけですがこれはわけなく行えます。
sepastian-capistrano3-unicorn は、unicorn_binというパラメータを用意してまして、これのデフォルトがunicornになっているわけなので、ここを変更する。
RAILS_ROOT/config/deploy.rbに下記記述を追記します。
set :unicorn_bin, ->{"unicorn_rails"}
(ラムダで囲んでんのは特に深い意味は無いんですが、評価時にいろいろ変更するようなモノが多いので念のため標準的にこうするようにしています。)
とここで世界は平和に終ると思っていました。
経緯2
unicornの時の-EパラメータがRACK_ENVであるということは理解していたので、RAILS_ENVをunicorn実行前に設定するようにしてたわけです。
こんな感じで
RAILS_ENV=hogehoge; unicorn -E development .....
僕はVM上でrailsを動かすコトが多くて、vmというRAILS_ENVをつくっていました。
しかしunicorn_railsに変更してみたら、僕のVMで急にunicornが立ち上がらなくなりました。
RAILS_ENV=vm; unicorn_rails -E development .....
どうも、dababase.ymlにadapterの指定がない的なエラーがはかれていて、おかしーなーと思ったんです。 と、ここで気付きました。
-Eオプションが、RAILS_ENVを上書いていることを。
んで、下記をみた
なるほどね。
以上!