• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:インストールしたgemがrequireできない)

gemのrequireできないエラー発生!原因と解決策を教えてください。

このQ&Aのポイント
  • 現在CentOSにて、rubyをいじっており、selenium-webdriverをgemでインストールしましたが、requireする際にエラーが発生しています。
  • gemのパスを変えようとしましたが、うまくいきませんでした。どのようにしたら解決できるでしょうか?
  • gemの環境はRubyGemsのバージョンが1.4.2で、パスは/usr/local/bin/gemです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.3

CentOSのバージョンは6なのでしょか? 設定は同じはずですので、もう一度確認の意味で secure_path で検索してみて見つからなければ、 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin のように全部追加してください /sbinと/usr/sbinはあった方が便利な様な気がします。 Scientific Linux6は初期状態で/sbin:/bin:/usr/sbin:/usr/binが登録されています。

04106972
質問者

補足

言葉足らずで申し訳ありません。CentOS5.9です。 どうやら6系だとデフォルトでsecure_pathが入っているようですね。5系で追加して大丈夫なんでしょうか? 試しに以下を追加してみましたが、sudo which gemでsudoコマンドが受けつけなくなりました。 (※sudo ruby -vは受け付けます) 追加項目 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin また、大変恐縮ですが、yumで入れたかソースコードからダウンロードしたか定かではありません。 yum listで見る限り以下がありました。 (rubyに関連してそうなものです) rubylibs.i386 1.8.5-29.el5_9 ruby.i386 1.8.5-29.el5_9 これは、ruby1.8.5がyumでinstallされたということなんでしょうか? お手数ですが、宜しくお願いします。

その他の回答 (9)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.10

/home/xxxxxx/.gem/ruby/1.9.1 に何か残っていて悪い事をしている可能性もありますので $ rm -r ~/.gem で消してしまい(このディレクトリは消してもよい) $ sudo gem update --system $ sudo gem update $ sudo gem clean でgem自身もアップグレードすればどうでしょうか それでも駄目ならrubyを消してしまいインストールしなおすしか思いつきません。 手でインストルしても良いのですが、rpmを利用するのが後々のことを考える楽なように思います。 http://rpm.pbone.net/で ruby-1.9.3 を検索すると ruby-1.9.3p194-5.1.i386.rpm RedHat EL 5 11478 kB が出てきます。32ビットならこれをダウンロードして、 sudo rpm -i ファイル名(ruby-1.9.3p194-5.1.i386.rpm) でインストールできます。インストールされた結果はyumにも反映されます。 依存するパッケージがある場合には、yumでインストールするか無ければ同じようにインストールします。

04106972
質問者

お礼

ご返信遅れまして申し訳ありません。 上記を試してみました。 大変勉強になりました。本当にありがごうざいます。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.9

>の中のmechanize.rbをmechanize-2.7.1.rbにしたらいけました。 この場合には require "mechanize" でできますのでしょうか? require "mechanize-2.7.1" にしないと駄目なように思いますが。 ちなみに、こちらは2.0.0ですが、 $ ls -l /opt/local/lib/ruby2.0/gems/2.0.0/gems/mechanize-2.7.1/lib drwxr-xr-x 38 root admin 1292 6 28 06:43 mechanize -rw-r--r-- 1 root admin 33524 6 28 06:43 mechanize.rb これを mechanize.rbをmechanize-2.7.1.rbに変更 $irb irb(main):001:0> require "mechanize" LoadError: cannot load such file -- mechanize (略) irb(main):002:0> require "mechanize-2.7.1" => true となりますけど。 mechanize.rbのままだとどんなエラーがでますか? それと $ gem list でmechanizeの部分は mechanize (2.7.1) となりますか?(古いバージョンの番号もいっしょに表示されても問題はない) $ ls -l /usr/local/lib/ruby/gems/1.9.1/gems/mechanize* でmechanize-2.7.1の1つだけが出力されますか? かなりおかしいように思います。

04106972
質問者

お礼

言葉足らずで申し訳ありません。 やはりおかしいですよね。私もやっていて違和感を おぼえます。 >require "mechanize" >でできますのでしょうか? >require "mechanize-2.7.1" >にしないと駄目なように思いますが。 require "mechanize-2.7.1"にしております。 >mechanize.rbのままだとどんなエラーがでますか? /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- mechanize (LoadError) from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_requir >$ gem listでmechanizeの部分はmechanize (2.7.1) >となりますか? mechanize (2.7.1)となります。 ほかのgemでも試してみましたが、やはりディレクトリ名と統一するとエラーはでてきません。 とりあえずは動きましたが、やはり腑に落ちない部分もあります。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.8

>あと、.bashrcに以下を追記しました。 > export GEM_HOME=/usr/local/lib/ruby/gems/1.9.1 > export RUBYLIB=/usr/local/lib/ruby/gems/1.9.1 > export PATH=$PATH:/usr/local/lib/ruby/gems/1.9.1 これは全部削除してください。必要ありませんし、RUBYLIBは間違いです。無効にするために(できればログインしなおしてください)。 ///現在のgem環境 以下は問題無さそうです。 > /usr/local/lib/ruby/gems/1.9.1/selenium-webdriver-2.33.0/lib これはおかしいです。 /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.33.0/lib の書き間違いであればOKです。もし上のようでしたらrubyを消去してインストールし直した方良いと思います。 ls /usr/local/lib/ruby/gems/1.9.1/gems/ でパッケージのフォルダ名が出力されれば正解です。

04106972
質問者

お礼

大変長らくお待たせしました。 やっと解決できました。 そして、ここまで、お付き合いいただきまして大変ありがとうございました。 お酒でもおごりたい気持ちです! 結果から申し上げますと、 ディレクトリ名とライブラリのrbファイルの名前を併せたことです。 例 /usr/local/lib/ruby/gems/1.9.1/gems/mechanize-2.7.1/lib の中のmechanize.rbをmechanize-2.7.1.rbにしたらいけました。これが最善策かどうかわかりませんが、 毎回リネームするのは面倒ですね。 ご返信いただきました後に、ベストアンサーとさせていただきます。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.7

とりあえずgemは問題無さそうですね。 rubyやirbが/usr/binから消えていたら取りあえずは大丈夫でしょう。 sudo yum clean all で解決しないなら、放っておくしか無いように思います。多分実害はないと思います。

04106972
質問者

お礼

/usr/binから消えております。 やっと、と思いきやまた、requireできず。 そもそもなんですが、ディレクトリやPATHが間違っているかもしれないですが、こちらチェックいただけませんでしょうか? ////selenium-webdriver2.33.0のディレクトリ /usr/local/lib/ruby/gems/1.9.1 ///selenium-webdriver.rbのディレクトリ /usr/local/lib/ruby/gems/1.9.1/selenium-webdriver-2.33.0/lib ///現在のgem環境 - RUBYGEMS VERSION: 1.4.2 - RUBY VERSION: 1.9.3 (2012-02-16 patchlevel 125) [i686-linux] - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1 - RUBY EXECUTABLE: /usr/local/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/bin - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /usr/local/lib/ruby/gems/1.9.1 - /home/xxxxxx/.gem/ruby/1.9.1 (xxxxxはユーザー名) - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://rubygems.org/ 別ファイルにて require 'selenium-webdriver' と記述。 また、gemをrequireするときというのは、ディレクトリごと読み込んでくれるのでしょうか? 基本的なことで大変申し訳ありませんが、宜しくお願いします。 あと、.bashrcに以下を追記しました。 export GEM_HOME=/usr/local/lib/ruby/gems/1.9.1 export RUBYLIB=/usr/local/lib/ruby/gems/1.9.1 export PATH=$PATH:/usr/local/lib/ruby/gems/1.9.1 これが間違っている可能性もあるかもしれません。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.6

CentOS5をインストールしたものがないので確認できませんが、記憶を頼りに書きます。 yumの仕様は6で変わっているので、勘違いしているところがあるかも知れませんが。 ruby.i386 1.8.5-29.el5_9 updates ruby-devel.i386 1.8.5-29.el5_9 updates などのようにupdatesあるいはinstalledと表示されているのは(多分)インストールされているパッケージだと思います。 (SL6だと表示がだいぶ違う) $ sudo yum remove ruby-libs としたらそれと依存関係のあるパッケージを含めて全部消えませんか? うまくいかなければ yum関係のデータが壊れている可能性もありますので、一度 $ sudo yum clean all して $ sudo yum makecache (5は必要だったと思います) その後で消してみるのも試してみてください。

04106972
質問者

お礼

上記を試してみましたが、removeできませんでした。 さきに述べた内容が返ってきます。 また、改めてinstallしようとしますと以下のような内容が表示されます。 Installing: ruby i386 1.8.5-29.el5_9 updates 279 k Installing for dependencies: ruby-libs i386 1.8.5-29.el5_9 updates 1.6 M そして、このupdatesがRepositoryに入っております。(正直よくわかっておりませんが) さらに、removeしようとしますと Removing: ruby-libs i386 1.8.5-29.el5_9 installed 5.0 M Removing for dependencies: ruby i386 1.8.5-29.el5_9 installed 792 k となり、こちらはinstalledがRepositoryとなっており、別物ではないかと考えております。 (これを削除しても上記updatesは残ります) 何度も恐縮ですが、こちらは削除しないとrequireできないものなのでしょうか? ちなみにですが、 $which gem /usr/local/bin/gem $sudo which gem /usr/local/bin/gem になりました。 以上、宜しくお願いします。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.5

CentOS5.9でしたか、 5.6か5.7あたりまでCentOSを使っていました。なかなかCentOS6が出ないので、しびれをきらしてScientific Linux6に乗り換えました。 さて、5はsecure_pathを設定しなくてもユーザーのPATH設定が引き継がれたはずです。/optに置いていたのですが6になったとたんにアクセスできなくなった記憶があります。先に書いたようにsudoとした場合PATHの優先順位が違うだけだと思います。 さて、yumでrubyは消せましたでしょうか?rubylibs.i386の方も消すのを忘れないように。 ruby-augeasなどごちゃごちゃと出るのは、remove命令でこれらも消そうするがインストールされていないよっという意味だと思います。なぜ出るのかは分かりませんがrubyさえ消せれば実害はないと思います。 yumでrubyが認識されているようですので、警告はでるものの消せるのではないかと思います。 変な方法で入れると、プログラムはあるけどyumで認識しないという自体にときどきなります。その時は強制的にインストールしてその後削除すれば可能です。

04106972
質問者

お礼

インストールして、下はremoveはできました。 ruby.i386 1.8.5-29.el5_9 installed が、こちらがremoveできません。 ruby.i386 1.8.5-29.el5_9 updates これはレポジトリでしょうか? 指定して、削除とかできないものなのでしょうか? さすがに削除にこんなに時間がかかるなんて、 自分にもrubyにもいらいらします。。

04106972
質問者

補足

ご参考までにyum list '*ruby*'が下記です。 eruby.i386 1.0.5-6.1 base eruby-devel.i386 1.0.5-6.1 base eruby-libs.i386 1.0.5-6.1 base graphviz-ruby.i386 22.0-4.el5.rf rpmforge libselinux-ruby.i386 1.33.4-5.7.el5 base ruby.i386 1.8.5-29.el5_9 updates ruby-augeas.i386 0.4.1-2.el5.rf rpmforge ruby-caca.i386 0.99-0.1.beta17.el5.rf rpmforge ruby-devel.i386 1.8.5-29.el5_9 updates ruby-docs.i386 1.8.5-29.el5_9 updates ruby-fam.i386 0.2.0-1.el5.rf rpmforge ruby-irb.i386 1.8.5-29.el5_9 updates ruby-libs.i386 1.8.5-29.el5_9 updates ruby-mode.i386 1.8.5-29.el5_9 updates ruby-qmf.i386 0.7.946106-28.el5.centos.1 extras ruby-rdoc.i386 1.8.5-29.el5_9 updates ruby-ri.i386 1.8.5-29.el5_9 updates ruby-rpm.i386 1.2.3-1.el5.rf rpmforge ruby-rrdtool.i386 1.4.7-1.el5.rf rpmforge ruby-shadow.i386 1.4.1-2.el5.rf rpmforge ruby-tcltk.i386 1.8.5-29.el5_9 updates rubygem-RedCloth.i386 4.2.7-1.el5.rf rpmforge rubygem-abstract.noarch 1.0.0-1.el5.rf rpmforge rubygem-activesupport.noarch 3.0.4-1.el5.rf rpmforge rubygem-amazon-ec2.noarch 0.9.17-1.el5.rf rpmforge rubygem-archive-tar-minitar.noarch 0.5.2-1.el5.rf rpmforge rubygem-builder.noarch 3.0.0-1.el5.rf rpmforge rubygem-cgi_multipart_eof_fix.noarch 2.5.0-1.el5.rf rpmforge rubygem-couchrest.noarch 1.0.1-1.el5.rf rpmforge rubygem-daemons.noarch 1.1.0-1.el5.rf rpmforge rubygem-deltacloud-client.noarch 0.1.1-1.el5.rf rpmforge rubygem-deltacloud-core.noarch 0.1.2-1.el5.rf rpmforge rubygem-erubis.noarch 2.6.6-1.el5.rf rpmforge rubygem-eventmachine.i386 0.12.10-1.el5.rf rpmforge rubygem-fastthread.i386 1.0.7-1.el5.rf rpmforge rubygem-gem_plugin.noarch 0.2.3-1.el5.rf rpmforge rubygem-haml.noarch 3.0.25-1.el5.rf rpmforge rubygem-hoe.noarch 2.9.1-1.el5.rf rpmforge rubygem-json.i386 1.5.1-1.el5.rf rpmforge rubygem-less.noarch 1.2.21-1.el5.rf rpmforge rubygem-liquid.noarch 2.2.2-1.el5.rf rpmforge rubygem-markaby.noarch 0.7.1-1.el5.rf rpmforge rubygem-mime-types.noarch 1.16-1.el5.rf rpmforge rubygem-minitest.noarch 2.0.2-1.el5.rf rpmforge rubygem-mongrel.i386 1.1.5-1.el5.rf rpmforge rubygem-mutter.noarch 0.5.3-1.el5.rf rpmforge rubygem-nokogiri.i386 1.4.4-1.el5.rf rpmforge rubygem-polyglot.noarch 0.3.1-1.el5.rf rpmforge rubygem-puppet-lint.noarch 0.1.6-1.el5.rf rpmforge rubygem-rack.noarch

  • ki073
  • ベストアンサー率77% (491/634)
回答No.4

ちょっと書き忘れです。 rubyを入れると、irbなども一緒にインストールされますので、もし/usr/binにあれば消しておいてください。 /usr/binに入っているのってyumで入れたものではないですか? yum listで見て、入っていればyumで消した方がきれいにできるはずです。 yumで出てこなければ、yumで一度インストールして、その後で消せば同じようになります。 エラーが出たら-fか何か強制的にインストールするオプションをつければ大丈夫なはずです。

04106972
質問者

お礼

こちらyumでremoveしようとしましたら以下の項目がでました。 Package(s) ruby available, but not installed. No Match for argument: ruby-augeas Package(s) ruby-augeas available, but not installed. No Match for argument: ruby-caca Package(s) ruby-caca available, but not installed. No Match for argument: ruby-docs Package(s) ruby-docs available, but not installed. No Match for argument: ruby-fam ・ ・ ・ こちら削除して大丈夫なんでしょうか? 現状は削除しておりません。 以上、宜しくお願いします。

04106972
質問者

補足

↓についてですが、削除しようとしもそもそもできませんでした。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

No.1です。ちょっと補足をしておきます。 こちらではScientific Linux 6を使っているのですが、質問者さんが使っておられるCentOSとほぼ同じだという前提で書きます。 まず、/usr/bin/rubyですが、yumで入れたのでしたら1.8.7でバージョンが古いわけです。 そこで/usr/localに1.9.3を入れられたのだと思います。多分2つのRubyが存在しているはずです。 単純に考えてyumで入れたものをeraseすれば良いのですが、何も設定していなければちょっと困った問題が発生します。 $ sudo ruby -v のようにすると sudo: ruby: コマンドが見つかりません となるはずです。 sudoで認識できなくなります。 原因は $ sudo env でPATHの設定を見れば分かるのですが、/usr/local/binが設定されていないはずです。 こちらではPATH=/sbin:/bin:/usr/sbin:/usr/bin となっています。 /usr/local/binを加える方法としてはroot権限で # /usr/sbin/visudo で Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin に/usr/local/binを追加すれば使えるようになります。

04106972
質問者

お礼

丁寧な解説ありがとうございます。 おっしゃる通りでrubyが2つ入っているみたいです。 対応してみまして、結果をご報告させていただきます。

04106972
質問者

補足

現状ですが、まず$sudo envをしてみたところPATHは PATH=/usr/bin:/bin となっておりました。なんかおかしいような。。。 また、usr/bin/rubyは削除いたしました。 おそらく、デフォルトでrubyが入っており、それを削除しいまま続け、ruby1.9系にはデフォルトでgemがはいっているにも関わらずgemをインストールした流れっぽいです。 また# /usr/sbin/visudoで Defaults secure_pathがみつかりません。 これは、Defaults secure_path = /usr/local/binと 追加して書けばよろしいでしょうか? 以上、宜しくお願いします。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

- /root/.gem/ruby/1.9.1 も気になりますが,/rootではなく$HOMEの方にできるはずです。 gemだけではなく、rubyが2つ入っていませんか? /usr/bin/rubyと/usr/local/bin/rubyに両方にありそうです yumで入れたのが/usr/binにありそうです。 たぶんsudoを付けると/usr/lib/ruby/gems/1.9.1 つけないと/usr/local/lib/ruby/gems/1.9.1が指定され 読み込めないのではないかと推測します。 それか/usr/bin/gemを残しておいて、PATHで/usr/local/binより/usr/binが優先されるように書き換える方法も考えられます。

関連するQ&A

専門家に質問してみよう