あじちゃんの備忘録。

〜ここはメモ帳です

削除した/移動したはずのファイルを探して「No such file or directory」でサーバーが起動しない!autoloadファイルが更新されていない時の対処方

git mv *** を頻繁にやっていると、autoloadファイルが更新されずにサーバーが起動できなかったりすることがあるのでメモ


例えばこんな感じでパスを変更したとして

git mv /aaa/bbb/ccc.php /aaa/ddd/ccc.php

このようなエラーが出たとする

$ php artisan serve

In ClassLoader.php line 444:
                                                                                                                                                     
  include(/aaa/bbb/ccc.php): failed to open stream: No such file or directory   

この場合、 [~/vendor/composer/autoload_classmap.php] の設定が正常に書き換わってくれていないので自動で治してやる。

composerのコマンドを使う。以下のどちらでも良い。

  • dump-autoload
  • dumpautoload
$ composer dump-autoload

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> php artisan package:discover
Discovered Package: barryvdh/laravel-ide-helper
Discovered Package: fideloper/proxy
Discovered Package: intervention/image
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Package manifest generated successfully.

これでもう一度サーバーを起動してやれば直っているはず。

rabbitmq.cluster.confのrabbit@xxxのxxxはコンテナ名っぽい

rabbitmq.cluster.conf に設定していたこの辺

# cluster_formation.peer_discovery_backend     = rabbit_peer_discovery_classic_config
#
cluster_formation.classic_config.nodes.1 = rabbit@hostname_01
cluster_formation.classic_config.nodes.2 = rabbit@hostname_02
# cluster_formation.classic_config.nodes.3 = rabbit3@hostname
# cluster_formation.classic_config.nodes.4 = rabbit4@hostname

てっきりhostnameを見てクラスタリングしてくれるものと思っていたけど、実はコンテナ名を見ていたみたい。
なので、 docker-compose.yml に↓を追加してやると解決した。

container_name: hostname_01    # またはhostname_02

特定のポートを開いているプロセスを殺す

特定のポートで実行中のプロセスを調べる

$ lsof -i:3314
COMMAND      PID   USER       FD   TYPE   DEVICE              SIZE/OFF  NODE  NAME
com.docke    771   user_name  20u  IPv4   0x6e99dd572d5a95e7  0t0       TCP   *:uohost (LISTEN)
com.docke    771   user_name  21u  IPv6   0x6e99dd572593ae5f  0t0       TCP   localhost:uohost (LISTEN)

lsof コマンドを使います
今回つけているオプションは -i:xxxx で、これはポート番号を指定しています

結果に出てくる項目は

COMMAND:プロセスが実行しているコマンド(プログラム)  
PID:そのポートを利用しているプロセスのID  
USER:プロセスの実行ユーザー  
FD:ファイルディスクリプター  
TYPE:ファイルの種別  
DEVICE:デバイスID  
SIZE/OFF:ファイルのサイズまたはオフセット  
NODE:プロトコル  
NAME:ポート名  

という感じ
NAMEについている (LISTEM) は待ち受け状態であることを表している

特定のプロセスを殺す

$ kill -9 771

kill コマンドを使います
基本は kill PID です
-9 コマンドは強制終了

ちなみに、 -0 オプションをつけるとプロセスを殺さずに存在確認だけができます
プロセスが存在すると出力はなく、プロセスが存在しないとエラーメッセージがかえってきます