「Herokuではじめる 初心者のためのRuby on Rails3入門」という有り難い記事を見つけたので、この記事に従ってせっせと作業を進めていましたところ、railsサーバーが起動しないという困ったエラーが起きました。
もっと詳しく言うと、最初は起動するんですが、いったん停止してもう一度起動しようとすると「already running(既に起動しているよ!)」と言われて起動できないという症状でした。
同じエラーで困っている誰かのためにもしかするとなるかもしれないので、エラーの原因と解消するためのハックを紹介します。
エラーの原因
サーバーを停止してもpid(プロセスID)を保持したままであるということが今回のエラーの原因のようでした。
サーバーを起動するとtmp/pidのディレクトリ内にpidを保持したファイル(server.pid)が出来るんですが、これがサーバーを停止しても残ったままなので「まだプロセスが残っている」と解釈されてしまう模様……。もちろんそのpidのプロセスなんて既に存在しないんですが。
エラー解消法1:server.pidを削除
railsサーバーを停止する度にserver.pidを削除すれば一応動きます。
けど、面倒ですよね。
エラー解消法2:起動する度に自動でserver.pidを削除する処理を書く
script/railsの先頭(コメント行の次)に
begin File.delete(File.expand_path('../../tmp/pids/server.pid', __FILE__)) rescue # Do nothing end
という記述を追加すると、停止→再起動を繰り返してもちゃんと動くようになりました! やったね!
お世話になった記事
大変助かりました。ありがとうございました。
- Railsを走らせるためにWEBrickを再起動しようとしたらA server is already runningと怒られる件について – 骨を盗んで肉を盗まず
- 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. : RUBY-12835