2013-01-22 4 views
2

나는 루비를 배우고 있으며 보석 파일을 만드는 법을 시험하고 싶다. 나는 내 컴퓨터에 다음과 같은 것을 설치했다. 루비 1.9.3p362 (2012년 12월 25일 수요일 수정 38,607) x86_64에 리눅스] Bundler를 버전 1.2.3 퀴 버전 10.0.3루비 보석 만들기

I가 bundle gem hello_gem를 사용 일품을 만들었다. 나는 hello_gem.rb

module HelloGem 
    class Base 
    def self.hello 
     puts "Hello Ruby Gem #{HelloGem::VERSION}" 
    end 
    end 
end 

다음과 같은 내 폴더 구조가에 다음 예제 코드를 추가했다.

├── Gemfile 
├── Gemfile.lock 
├── hello_gem.gemspec 
├── lib 
│   ├── hello_gem 
│   │   └── version.rb 
│   └── hello_gem.rb 
├── LICENSE.txt 
├── Rakefile 
├── README.md 

그럼 나는 rake install을 사용하여 보석을 만들었습니다. 그런 다음 irb을 시작했으며 다음을 실행할 수 있습니다.

1.9.3-p362 :001 > require 'hello_gem' 
=> true 
1.9.3-p362 :002 > HelloGem::Base.hello 
Hello Ruby Gem 0.0.1 
=> nil 
1.9.3-p362 :003 > 

lib 폴더로 코드를 옮기고 싶을 때 문제가 발생합니다. 나는 lib/hello_gem/base.rb을 만들고 거기에 위의 코드를 추가했습니다. 그리고 hello_gem.rb에서 방금 require "hello_gem/base"을 사용했습니다. 이제 내 프로젝트는 다음과 같습니다.

├── Gemfile 
├── Gemfile.lock 
├── hello_gem.gemspec 
├── lib 
│   ├── hello_gem 
│   │   ├── base.rb 
│   │   └── version.rb 
│   └── hello_gem.rb 
├── LICENSE.txt 
├── Rakefile 
├── README.md 

무슨 일이 있었 다음과 같은 오류를 테스트 할 rake installirb을 사용을 사용하여 보석을 빌드 할 때.

1.9.3-p362 :001 > require 'hello_gem' 
LoadError: cannot load such file -- hello_gem/base 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
from /home/sandarenu/.rvm/gems/ruby-1.9.3-p362/gems/hello_gem-0.0.1/lib/hello_gem.rb:2:in `<top (required)>' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
from (irb):1 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>' 
1.9.3-p362 :002 > 

나는이 문제를 해결하는 방법을 찾을 수 없습니다. 누군가 내가 여기서 잘못하고있는 것을 말할 수 있다면 큰 도움이 될 것입니다.

미리 감사드립니다.

+0

재생할 수 없음 : http://pastie.org/5805403. 시험을 위해 신선한 IRB를 개봉하셨습니까? –

답변

4

bundle gem에 의해 생성 된 .gemspecGit을 사용하여 gem에 포함 할 파일을 결정합니다. 이 라인이 포함이 추가하기 위해서는

gem.files   = `git ls-files`.split($/) 

당신의 hello_gem/base.rb 당신은 Git 저장소에 추가해야합니다. 원래 설정이 당신을 위해 작동하기 때문에 나는 당신이 망할 놈이 설치되어 가정, 그래서 당신은 단지 실행해야합니다 : 당신은 실제로 그것을 집어 보석에 추가 git ls-files의 파일을 커밋 할 필요가 없습니다

git add lib/hello_gem/base.rb 

을 , 그래서 이것이 작동하도록 충분해야합니다.

+0

아, 지금 기억합니다. 얼마 전에 내 자신의 보석으로이 문제가 있었다. :) –

+1

OMG! ... 정말 효과가 있어요. :). 답을 확인하기 전에 샘플 코드를 [github] (https://github.com/sandarenu/hello_gem)에 게시했습니다. 이제는 효과가 있습니다. 나는이 문제를 여러 시간 동안 고민하고있었습니다. 내가 확인한 튜토리얼에는이 문제가 지정되지 않았다. 고맙습니다. –