rack server の unicorn 起動時に -E 引数で環境を指定できるんだけど、ここで production を指定するのは間違いだったという話。rails env などが production だから混乱しがちだけど、ここは deployment か none を指定するのが正しい。知ってるわって人が大多数かもしれないけど、思い込みで production にしているアプリがいくつかあった。。
RACK ENVIRONMENT Accepted values of RACK_ENV and the middleware they automatically load (outside of RACKUP_FILE) are exactly as those in rackup(1): development - loads Rack::CommonLogger, Rack::ShowExceptions, and Rack::Lint middleware deployment - loads Rack::CommonLogger middleware none - loads no middleware at all, relying entirely on RACKUP_FILE All unrecognized values for RACK_ENV are assumed to be "none". Production deployments are strongly encouraged to use "deployment" or "none" for maximum performance.
http://unicorn.bogomips.org/unicorn_1.html
この引数はどのRackミドルウェアをロードするかの差っぽい。 とはいえ、development か deployment を指定しなかった場合は none と同じ扱いになりそうです。
https://github.com/defunkt/unicorn/blob/735d0f82adcdf9851664136424004dacfbe2423c/lib/unicorn.rb#L79
というわけで、サーバーに設置するタイプは deployment か none を指定するとよさそう。
追記: RACK_ENV
https://github.com/rack/rack/blob/028438ffffd95ce1f6197d38c04fa5ea6a034a85/lib/rack/server.rb#L157 RACK_ENV 自体に production が存在していない。
https://github.com/isucon/isucon5-qualify/blob/ba895cbce8c5b2471dd9c0dca02f6a83c46d34c8/gcp/bench/files/env.bench.sh#L3 “RACK_ENV production” でググるとけっこう出てくる。 例えばISUCONでもproductionになってるようだった。
追記: Sinatra
https://github.com/sinatra/sinatra#configuration Sinatra の Configuration で RACK_ENV に production をセットしようという案内があった。
Introduce SINATRA_ENV and remove RACK_ENV by dmathieu · Pull Request #984 · sinatra/sinatra
ただし、そのような環境はないからちゃんと責務を分けようという Pull Request も上がっている。