blog
nodebrewを入れてパッケージ版node.jsを消したらgemが使えなくなった時のメモ
この記事は書かれてから1年以上経過しており、内容が古い場合があります。
先日、nodebrewをインストールしてパッケージ版node.jsのアンインストールしたら急にgemが動かなくなってしまったので色々試行錯誤したらなんとか動くようになりました。ただ知識不足なだけなのですが、知識や経験が浅いとコマンドラインはこういうところが怖いですね。
この記事の内容は正しい解決方法ではないかもしれません。情報をお持ちの方がいたらコメントいただけると助かります。
エラーの内容
エラーを読む限りrbenvでインストールしたrubyのopensslが問題のようです。結論から言うとこの問題はrbenvで対象のrubyを入れ直すことで解決しました。
rbenv exec gem update
ERROR: Loading command: update (LoadError)
dlopen(/Users/nukos/.rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method
Referenced from: /Users/nukos/.rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
in /Users/nukos/.rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle - /Users/nukos/.rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
rbenvのruby自体を入れ直してみる
$ rbenv install 2.1.0
rbenv: /Users/nonakaryuichi/.rbenv/versions/2.1.0 already exists
continue with installation? (y/N) y
他に試したこと
rbenvのrubyを再インストールする前に、いくつかのことを試していました。再インストールしてもうまくいかないという方は参考にしてみてください。
Homebrewを探ってみる
まずは各ツールをアップデートしてみようと思い、Homebrewの更新から始めました。
$ brew update
globalのopen-sslを更新
次にOpenSSLの更新。実際は最新版だったので、再インストールも試してみます。
$ brew upgrade openssl
Error: openssl-1.0.1i already installed
$ brew uninstall openssl
$brew install openssl
これでも解決せず。
Homebrewの診断
最後はDoctorに聞いてみた。
$ brew doctor
やばい。けっこうエラーが表示されている。
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
Warning: A newer Command Line Tools release is available.
Update them from Software Update in the App Store.
Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
Unexpected header files:
/usr/local/include/node/ares.h
/usr/local/include/node/ares_version.h
/usr/local/include/node/nameser.h
/usr/local/include/node/node.h
/usr/local/include/node/node_buffer.h
/usr/local/include/node/node_internals.h
/usr/local/include/node/node_object_wrap.h
/usr/local/include/node/node_version.h
/usr/local/include/node/openssl/opensslconf.h
/usr/local/include/node/uv-private/ngx-queue.h
/usr/local/include/node/uv-private/stdint-msvc2008.h
/usr/local/include/node/uv-private/tree.h
/usr/local/include/node/uv-private/uv-bsd.h
/usr/local/include/node/uv-private/uv-darwin.h
/usr/local/include/node/uv-private/uv-linux.h
/usr/local/include/node/uv-private/uv-sunos.h
/usr/local/include/node/uv-private/uv-unix.h
/usr/local/include/node/uv-private/uv-win.h
/usr/local/include/node/uv.h
/usr/local/include/node/v8-debug.h
/usr/local/include/node/v8-preparser.h
/usr/local/include/node/v8-profiler.h
/usr/local/include/node/v8-testing.h
/usr/local/include/node/v8.h
/usr/local/include/node/v8stdint.h
/usr/local/include/node/zconf.h
/usr/local/include/node/zlib.h
Warning: Unbrewed .la files were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
Unexpected .la files:
/usr/local/lib/psqlodbcw.la
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
jq
とりあえず全部直しましょう。
- Xcodeのコマンドラインツール
- 再インストール:
$ sudo xcode-select --install
- ライセンスの同意:
$ sudo xcodebuild -license
- 再インストール:
- パッケージ版のnode.jsが邪魔?
- 不要なファイルがある
- 消す:
$ rm -rf /usr/local/lib/psqlodbcw.la
- 消す:
- jqがリンクされていない
$ brew link jq
もう一度診断してみる
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
Warning: Broken symlinks were found. Remove them with `brew prune`:
/usr/local/bin/bower
/usr/local/bin/grunt
/usr/local/bin/styledocco
言われるがままに$ brew prune
コマンドを実行。
$ brew prune
Pruned 0 dead formulae
Pruned 3 symbolic links and 6 directories from /usr/local
3度目の正直(brew doctor)
キタコレ!と思いました。
$ brew doctor
Your system is ready to brew.
これでgemが動くかと思ったら動かなかったわけです。もう少し検索をして$ brew link openssl --force
なんかも試してみましたが結局解決したのが最後に行ったrubyの再インストール$ rbenv install <version>
でした。とりあえず動くようになったし良い勉強の機会になりました。
実際何が原因でこうなったかということろまでは理解できていませんが、一歩ずつ上っていこうと思います。