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を上書いていることを。
んで、下記をみた
なるほどね。
以上!