6

最近、Ruby ライブラリを gem に変換しましたが、コマンド ラインの使いやすさが損なわれているようです。

図書館としては問題なく使えた

  $ ruby -r foobar -e 'p FooBar.question' # => "answer"

また、irb は gem として、コマンドライン スイッチから gem を要求する方法を知っています。

  $ irb -rubygems -r foobar
  irb(main):001:0> FooBar.question # => "answer"

しかし、同じことがルビー自体にも失敗します:

  $ ruby -rubygems -r foobar -e 'p FooBar.question'
  ruby: no such file to load -- foobar (LoadError)

私は今これをしなければなりません、それは醜いようです:

  ruby -rubygems -e 'require "foobar"; p FooBar.question' # => "answer"

または、2 つのスイッチを機能させる方法はありますか?

:gemがすべての有用なメソッドにbin / programを追加できることは知っていますが、コマンドラインの名前空間を不必要に汚染するのは好きではありません

4

2 に答える 2

7

-rubygems は実際には -r ubygems と同じです。

私が理解している限り、検索パスを台無しにすることはありませんが、 -r 検索パスにも何も追加しないと思います。私はこのようなことをすることができました:

ruby -rubygems -r /usr/lib/ruby/gems/myhelpfulclass-0.0.1/lib/MyHelpfulClass -e "puts MyHelpfulClass"

上記で指定した lib ディレクトリに MyHelpfulClass.rb が存在します。

この種のものは最悪ですが、少なくとも複数の -r equire ディレクティブを使用できることを示しています。

少し見栄えの悪い回避策として、Ruby ライブラリの検索パスに項目を追加することができます (*nix ではコロン区切り、Windows ではセミコロン区切り)。

export RUBYLIB=/usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib
ruby -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"

環境変数をいじりたくない場合は、自分でロード パスに何かを追加できます。

ruby -I /usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib \
   -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"
于 2008-09-23T21:39:03.747 に答える
0

注: この問題は ruby​​ 1.8 に存在しますが、ruby 1.9 で解決されています。

1.8 では、 を介して両方のライブラリを指定する-rと、ruby は$LOAD_PATH. しかし$LOAD_PATH、宝石を見つけることができるように ruby​​gems は変更されます。

それが機能する理由irbは、irb 変化に注意を払うから$LOAD_PATHです。

残念ながら、私が見つけた最善の回避策は、より冗長な形式を使用することです。

ruby -rubygems -e 'require "foobar"; p FooBar.question'

ただし、イテレータを使用すると、ライブラリの数に比例して痛みが増加することはありません。

ruby -rubygems -e '%w(rake rspec).each{|r| require r }'
于 2013-01-04T19:48:28.763 に答える