문제

나는 최근에 루비 도서관을 보석으로 변환했는데, 이는 명령 줄 유행성을 깨뜨리는 것처럼 보였다.

도서관으로 잘 작동했습니다

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

그리고 보석으로서, IRB는 명령 줄 스위치에서 보석을 요구하는 방법을 알고 있습니다.

  $ 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 개의 스위치를 작동시키는 방법이 있습니까?

메모: 보석이 모든 유용한 방법에 대해 빈/프로그램을 추가 할 수 있다는 것을 알고 있지만 불필요하게 명령 줄 네임 스페이스를 오염시키는 것을 좋아하지 않습니다.

도움이 되었습니까?

해결책

-RubyGems는 실제로 -r ubygems와 동일합니다.

내가 이해하는 한 검색 경로를 엉망으로 만들지는 않지만 -R 검색 경로에 아무것도 추가하지 않는다고 생각합니다. 나는 다음과 같은 일을 할 수있었습니다.

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

MyHelpfulclass.rb는 위에 지정된 LIB 디렉토리에 존재합니다.

그런 종류의 짜증이 나지만 적어도 여러 가지 똑같은 지시문을 가질 수 있음을 보여줍니다.

약간 덜 못생긴 해결 방법으로 Ruby Library 검색 경로에 추가 항목을 추가 할 수 있습니다 ( *Nix에서 구분, 세미콜론은 창에서 구분되었습니다).

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"

다른 팁

참고 :이 문제는 Ruby 1.8의 경우 존재하지만 Ruby 1.9에서 해결됩니다.

1.8에, 당신은 두 LIB를 통해 두 가지를 지정하는 경우 -r, Ruby는 변경 사항에주의를 기울이지 않고 각 라이브러리를로드하려고합니다. $LOAD_PATH. 그러나 Rubygems는 변합니다 $LOAD_PATH 보석을 찾을 수 있습니다.

그것이 작동하는 이유 irb 그게 다 irb 하다 주의를 기울이십시오 $LOAD_PATH 변화.

불행히도, 내가 찾은 최고의 해결 방법은 더 장황한 형태를 사용하는 것입니다.

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

반복자를 사용하는 경우 통증은 리브 수에 따라 선형으로 증가하지 않습니다.

ruby -rubygems -e '%w(rake rspec).each{|r| require r }'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top