2009-08-11 9 views
14

私は、ルビーといくつかのルビーの宝石をサポートするウェブホスト上で作業するいくつかの宝石を取得しようとしていますが、使用する。 〜/ .gemrcRubyの宝石は掲載されていますが、ロードされません(ユーザーディレクトリの宝石ではなく、ルビーディレクトリ)

私はhereを発見した指示に従い、私は私の宝石パスに元宝石の位置を保ち、で/パス自分を追加/に/私の/ home /宝石

gemhome: /users/home/myuser/gems 
gempath: 
- /usr/local/lib/ruby/gems/1.8 
- /users/home/mysuser/gems 

Iいくつかのgemを手動でダウンロードし、gemコマンドの--localと--install-dirオプションを使用してインストールを行いました。私は "宝石リスト"を作成し、私のユーザーディレクトリにインストールした宝石と、通常のシステムパスにあるオリジナルの宝石を実際に見ることができます。

私がIRBを蹴ったり、ルビー-eを実行すると、すべてのシステムの宝石は正常に動作します。しかし、私は私のユーザディレクトリにインストール宝石がロードされて取得することはできません。

$ ruby -r rubygems -e "require 'nokogiri'" 
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError) 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require' 
    from -e:1 

私も古い学校のrequire_gemを試してみました:

$ irb -r rubygems 
irb(main):001:0> require_gem 'nokogiri' 
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0) 

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem' 
    from (irb):1 

私の「宝石リスト」から、私は見ることができます:

nokogiri (1.3.3) 
Nokogiri is an HTML, XML, SAX, and Reader parser 

すべてのユーザーディレクトリのインストール宝石に同じ問題があります。私はここで何が欠けていますか?

編集:これはではなく、レールアプリです。これは、コマンドラインアプリケーション用です。上記のテストと同様に、プログラムは私のユーザーアカウントで実行されます。

EDIT:IRBのGem.pathを見ました。 は、システムのgemパス、/usr/local/lib/ruby/gems/1.8をリストし、ユーザーのdirパスもリストしません。

+0

irbに "Gem.path"という式を入力すると表示されるものは何ですか? – Rafe

+1

ああ、興味深い...上記の編集を参照してください – Matt

答えて

38

私は同じ問題を抱えていた、私はこのと格闘していると判断している

+0

私は '-rails'と一緒に宝石を持っていたので、これを追加するための "ルビーファイル"が何であるかを調べるのに1時間を費やしました。最後にそれをrails/rails.rbファイルに追加し、魔法のように動作させました –

0

Webアプリケーションがあなたのユーザーアカウントと同じ設定を使用していないのは、別のユーザーとして実行されている可能性が高いためです。 1つの方法は、アプリケーションのvendor/gemsに宝石をロードすることです。

rake gems:unpackを使用してローカルマシンを実行し、それらの宝石をバージョンコントロールにチェックインしてから、サーバーに展開することができます。つまり、最も信頼できるアプローチです。また、アプリケーションの設定を変更して、ホームディレクトリ内の宝石を探すこともできます。

+0

これは実際にはウェブアプリケーションではありません。レールなどはありません。私はコマンドラインアプリケーション用の宝石ライブラリが必要です。 – Matt

+0

私のユーザーの通常の環境下でもコマンドアプリを実行することができます。そのため、上記のコマンドライン実行のエラーを示す例はまさに問題です。 – Matt

+0

私はそれがRailsアプリケーションかどうか疑問に思っていました。 – Rafe

5

私の現在の作業(しかし、理想的な未満)これは私がすべてのために、自動的に私のためにやって.gemrcの内容を期待したものであるため、解決策は、私は理想的な未満言う

Gem.path.push "/path/to/my/gems" 

を行うことです私のユーザー環境下でのRubyの実行。なぜそれがしないのか分かりませんが、上記は少なくとも機能しています。

0

に役立つことを願っています

require 'rubygems' 

ルビーファイルの先頭に以下を追加して、それを修正しました。 gemrcはすべての場合にロードされているようには見えません。たとえば、宝石のインストール時には尊敬されますが、irbやscript/consoleの実行時には必ずしも必要ではありません。

また、ローカルディレクトリのパスは、多くのサイトで説明したものとは異なる必要があることがわかりました。私にとっては、次の作品:

--- 
gem: --no-ri --no-rdoc 
gemhome: /home/.gem/ruby/1.8 
gempath: 
- /home/.gem/ruby/1.8 
- /usr/lib/ruby/gems/1.8 
0

私は同様の問題を持っていたが、ここで受け入れ答えは(少なくともそれは私のためではなかった)明らかに移動するための方法ではありません。可能であれば、宝石ファイルでこれを行うべきではありません:

require 'rubygems' 

なぜあなたは聞いていませんか?この記事を見てください:いずれの場合で http://tomayko.com/writings/require-rubygems-antipattern

を、あなたはIRBを呼び出すときだけ「RubyGemsの」を必要とすることによって、問題ないはずです。

> irb -r 'rubygems' 

とあなたは同じ結果を持っている必要があります。なぜこの質問のためにこのメソッドが動作しないのか分かりません。

関連する問題