【エラーメモ】ターミナルのエラー

サーバーが起動しない。


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いじれたらかっこいいし、効率良さそうだから、基本的なコマンドやよく使うコマンドから少しづつ覚えていきたい。