結論
ソースコード中のパスをすべて絶対パスで記述しないとエラーとなる.
経緯
デーモン化したら動かない
Sinatra で作ったアプリを rackup -D コマンドによりデーモン化したところ,正常に動作しない.アプリは internal server error を返し,プロセスは ps コマンドでも確認できない.アプリが使うポートはわかっていたため, sockstat コマンドからプロセス番号を見つけて殺した.
とりあえず調べる
sinatra, rack, rackup, daemonize 等のキーワードで検索するも,同様のケースは見当たらない.そして,サーバを Thin, Passenger, Unicorn 等にしてデーモン化するケースをよく見かける.
WEBrick を疑う
Sinatra 標準のサーバである WEBrick のケースを特に調べる.そうするうちに以下の記事に辿り着く.
どうやらデーモンとして実行した際にはカレントディレクトリを / に移動するらしい.というわけで,ソースコード中の相対バスをすべて絶対パスに書き換えると……動いた.
終わりに
Ruby プログラムをデーモン化する際には標準でカレントディレクトリを / に移動するものらしい.当初の Sinatra, Rack といったキーワードだけにとどまる話ではなかったようで.仕様書やソースコードはしっかりと読むこと.