Macの初期Rubyは罠かよ・・・

child-1721906_1280

まじかよぉ・・・・
ハマったわぁ

MacでRubyのプログラムを動かそうとしたらエラーが出る。
↓こんなヤツ

`require': cannot load such file -- selenium-webdriver (LoadError)

 

本時期は Mac OS X El Capitan より前のVer時のものです。
El Capitan以降では、Operation not permitted が発生します。
sudo を付与しても発生します

El CapitanからRootlessという機能が採用されています。
この機能のために Operation not permitted が発生します。

Rootlessを解除するにはリカバリーモードでの起動が必要です。
リカバリーモードの方法は以下の記事をご参照ください。

>> Emacsのauto-installで接続エラー443発生
※上記の記事で「リカバリーモード」や「8−3.」で検索してください。

 

 




再現手順

手順としてはこんな感じ

1.selenium-webdriverを使ったプログラムを書く

require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome

2.selenium をインストール

$ sudo gem install selenium-webdriver

3.gemのインストールリストを確認

$ gem list

リストの中にseleniumが無いのでおかしいんだけど、ひとまず後で考えるとする

4.ruby sele.rb でエラー発生

`require': cannot load such file -- selenium-webdriver (LoadError)

要は selenium-webdriver が無いって言われてる。
gem list に出てないしやっぱりかという感じ。

とは言え、解決方法が分からない。

調べまくった結果やっと分かった。

原因

Macに最初に入っているRubyが古いからアカンねん!!!

解決

Rubyをバージョンアップしなはれぇ〜!!!

1.まずは現在のRubyのバージョンを確認

$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]

2.どこにあるのか確認

$ which ruby
/usr/local/bin/ruby

3.HomebrewでRubyをインストール

※その前にHomebrewをバージョンアップ
※Homebrewはちょくちょく更新されているのでバージョンアップしておく

$ brew -v
Homebrew 0.9.5 (git revision 0f37; last commit 2015-11-20)
$ brew update
Updated Homebrew from 0f37e294 to 22bde078.
......
$ brew -v
Homebrew 0.9.5 (git revision 22bd; last commit 2015-11-26)

4.HomebrewでRubyをインストール

$ brew install ruby
==> Installing dependencies for ruby: readline, libyaml
......
$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]

Verが変わってないじゃん と思うでしょうが、まぁ、そらそうです。
HomebrewでインストールしたRubyは「/usr/local/bin/ruby」(/usr/local/Cellar/ruby/2.2.3/bin/ruby が実体)、現在のRubyは「/usr/bin/ruby」。
この現在のRubyをHomebrewでインストールしたものに置き換えればOK!!

5.現在のRubyをバックアップする

$ sudo mv /usr/bin/ruby /usr/bin/ruby_org_2.0.0

これで現在のRubyは不在です。
この位置にHomebrewでインストールしたRubyを置けばOK!!

6.HomebrewでインストールしたRubyのシンボリックリンクを置く

$ sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

7.置き換わったはずのRubyのバージョンを確認

$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]

Rubyが置き換わった!!!!

8.selenium-webdriver のインストール

$ sudo gem install selenium-webdriver
Fetching: websocket-1.2.2.gem (100%)

 


 

これでエラーはなくなって正しく実行されるようになりました。
ホンマこれで半日潰れたわ。
ただ、この時点でも gem list の中に selenium が無いんやけど・・・、ま、ええか。
気にしないようにしましょう(笑)

サンプルプログラム

require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.navigate.to "http://yahoo.com"

※事前に「brew install chromedriver」しておく必要あり

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

Windows/Mac/Linuxを使う現役システムエンジニア&プログラマ。オープン系・組み込み系・制御系・Webシステム系と幅広い案件に携わる。C言語やC#やJava等数多くのコンパイラ言語を経験したが、少し飽きてきたので、最近はRubyやPython、WordPressなどのWeb系を修得中。初心者向けのプログラミング教室も運営中。オンライン・対面・出張等でプログラミングをレッスンします。