【エラーメモ】ターミナルのエラー
サーバーが起動しない。
viやvimでファイルを編集し、保存するときにエラーが発生し、元の画面に戻ってこれなくなる。
といったエラーに直面したので、解決方法をメモしてきます。
サーバーが起動しない
何らかの原因で突然サーバーが起動しなくなりました。
rails s でサーバーが立ち上がらないとき
server.pidファイルを削除
[Railsプロジェクトフォルダ]\tmp\pids\server.pid
これがサーバー起動の際に使用されているIDっぽいので、このパスにあるファイルを削除する。 ちなみに、サーバー起動と終了をしてみるとserver.pidが作られたり、削除されたりしている。 このように、サーバーを終了すると削除されるものだが、エラー発生時は残ったままで、どうやらエラー文の内容を考えても、「そのサーバー(:3000)はもう既に起動してるよ」ってことでした。なぜこうなったのかはまだわかっていないです。
% lsof -wni tcp:3000
このコマンドを実行すると
% lsof -wni tcp:3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 409 fndm40 156u IPv4 0xf4f2b081d54b7cbf 0t0 TCP 127.0.0.1:61388->127.0.0.1:hbci (ESTABLISHED) ruby 1091 fndm40 20u IPv4 0xf4f2b081c673bcbf 0t0 TCP *:hbci (LISTEN) ruby 1091 fndm40 26u IPv4 0xf4f2b081d574ceaf 0t0 TCP 127.0.0.1:hbci->127.0.0.1:60305 (CLOSE_WAIT) ruby 1091 fndm40 28u IPv4 0xf4f2b081d48de3c7 0t0 TCP 127.0.0.1:hbci->127.0.0.1:61388 (ESTABLISHED)
という長文が表示される。 どのpidファイルの番号を削除するのか注意して見ると、ここでは1091がpid番号なので、以下のコマンドを実行してserver.pidファイルを削除する。
% kill -9 1091
これで
% rails s
を実行すると、無事サーバー起動できた。
E45: 'readonly' option is set (add ! to override) というエラー文が出たとき
環境変数を設定する際に、viやvimでファイルを編集して保存したら、esc と :eq でインサートモードも抜けていつものターミナル画面に戻ってくるはずが出られなくなりました。 エラー文を見る限り、原因は書き込み権限のないユーザーで記述を変更しようとしているからみたい。
#### エラー解消法 esc でインサートモード(編集できる状態)を抜けて、以下のコマンドを実行する
:w !sudo tee %
するとパスワードの入力を求められたり、
Press ENTER or type command to continue
というメッセージが出てくる。 メッセージはEnterで進んで、
:q!
とすると、いつものターミナル画面に戻ってこれる。 強引に抜けてきた感じはするが、編集した内容はちゃんと保存して上書きできている。
終わりに
ターミナルのコマンドは難しいし、エラーになると下手にコマンドいじれないから恐ろしい。でも、ターミナル操作でPCいじれたらかっこいいし、効率良さそうだから、基本的なコマンドやよく使うコマンドから少しづつ覚えていきたい。