homebrewでrabbitmqのバージョンアップをしようと思ったら、かなりつまづいたので、homebrew環境における環境のクリーンアップに簡単に触れておく。
発生した前後関係
brew upgrade rabbitmq
でrabbitmq3.6.6 -> rabbitmq3.7.0へのアップグレードを行いました。また、そこから、gitを使って、3.6.14や3.6.12などのバージョンを入れ、複数の環境が混在する環境が出来上がってしまっていました。
エラーの内容
brew services start rabbitmq
では正常にスタートしたように見えるのですが、/usr/local/sbinの下にあるユーティリティを使うとnodeが動いていないことがわかる。実際に、brewを使わず、rabbitmq-serverだけを動かすと
$ /usr/local/sbin/rabbitmq-server
## ##
## ## RabbitMQ 3.7.0. Copyright (C) 2007-2017 Pivotal Software, Inc.
########## Licensed under the MPL. See http://www.rabbitmq.com/
###### ##
########## Logs: /usr/local/var/log/rabbitmq/rabbit@localhost.log
/usr/local/var/log/rabbitmq/rabbit@localhost_upgrade.log
Starting broker...
{"Kernel pid terminated",application_controller,"{application_start_failure,rabbit,{{schema_integrity_check_failed,[{table_attributes_mismatch,rabbit_exchange,[name,type,durable,auto_delete,internal,arguments,scratches,policy,operator_policy,decorators,options],[name,type,durable,auto_delete,internal,arguments]}]},{rabbit,start,[normal,[]]}}}"}
Crash dump is being written to: /usr/local/var/log/rabbitmq/erl_crash.dump...done
上記のように"Kernel pid terminated"というエラーが出ます。/usr/local/var/log/rabbitmq/err_crash.dumpをみても、同じエラーが見つかるだけでこれ以上の情報がでてきません。
/usr/local/var/log/rabbitmq/rabbit@localhost.logというファイルもあり、こちらを見ると、"schema_integrity_check_failed"というエラーメッセージが出てきます。
結局、バージョン情報が錯綜していることが原因っぽいので、brewでのrabbitmqのクリーンインストールをする必要が出てきました。
brewにおけるrabbitmqのクリーンインストール
Stack Overflow等で解決策を探すも、情報が色々なところに散らばっていたので、トライアンドエラーで環境をクリーンアップすることに・・。結局、以下を実行したらうまく動きました。
$ brew uninstall rabbitmq
$ brew cleanup -s
$ rm -rf /usr/local/var/rabbitmq/
$ rm -rf /usr/local/var/lib/rabbitmq
$ rm -ff /usr/local/var/log/rabbitmq
$ rm -rf /usr/local/etc/rabbitmq
$ brew install rabbitmq
ポイントは、/usr/local/var(特にlib)の下に色々と展開されていて、それらはuninstall後も残ること。これらをちゃんと削除しないと上記のようなエラーが出る場合があるようです。
brew cleanup -s
は一回ダウンロードしたインストールパッケージを削除するコマンド、これを実行するとパッケージのダウンロードから再度やり直すことができます(が、今回のエラーとは関係なさそうです)。
他のパッケージでもクリーンインストールしたいときに参考になるかも。。。