骨を盗んで肉を盗まず

2013-06-25

Railsを走らせるためにWEBrickを再起動しようとしたらA server is already runningと怒られる件について

どうも環境依存の問題らしい? Redmineでも同じ症状が出てる人がいたらしいので、IDERailsやる奇特な人しか引っかからないかも。
NetBeans7.3.1 / JRuby 1.7.3 / Rails 3.2.13 というニッチな環境のお話。

症状としては、最初の起動は問題ないが、一度停止してからもう一度起動しようとすると怒られる。
どうやら tmp/pids/server.pid*1 というのが残っているのが問題らしい。停止する時に片付けてくれないのか……(困惑

いちいち手で tmp/pids/server.pid を削除する手もあるが、糞面倒だ。*2
片付けてくれないんなら、起動する時に消しゃあいいんだよ! って事で config/boot.rb の先頭にでも、これを置いておく。

File.delete(File.expand_path('../../tmp/pids/server.pid',  __FILE__)) rescue

 単に1行で削除しているだけだ。
 逆にtmp/pids/server.pidが無い状態で起動するとファイルが無いよという例外を吐いて止まってしまうので
 最後に後置のrescueを置いて何も返さない、というような事をしておく。レスキュー隊員まさかの見殺しの巻。


 以下のフォーラムを参考にした。
Rubymine 4.5.4 - Server PID not updating in new version of rails 3.2.11. Works in Rubymine 4.5.4 when using rails 3.2.8.

 「script/railsの先頭に記述するとイイヨ!」って書いてあるけど、それやったらgenerateとかRails関係のコマンド実行した全部のタイミングで動くんじゃね? なんか怖くね? って事で私は config/boot.rbを推奨。とはいえ、大差無いか。

*1:pidってプロセスIDなんだろうけど、これって何で一時ファイルとして保持してるんだろう。疑問。

*2ぶっちゃけRailsは開発中サーバー起動しっぱなしでもダイナミックに色々反映してくれるから、再起動の頻度なんて高くないし大して困らないんだけど

Connection: close