blog

nodebrewを入れてパッケージ版node.jsを消したらgemが使えなくなった時のメモ

    • Ryuichi Nonaka
    この記事は書かれてから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>でした。とりあえず動くようになったし良い勉強の機会になりました。

    実際何が原因でこうなったかということろまでは理解できていませんが、一歩ずつ上っていこうと思います。

    参考サイト

    コメント・フィードバック