2013-01-22 5 views
2

J'apprends ruby ​​et je voulais tester comment créer le fichier de pierres précieuses. J'ai suivi suivants dans ma machine. 1.9.3p362 rubis (25/12/2012 révision 38607) [x86_64 Linux] Version 1.2.3 Bundler râteau version 10.0.3Ruby Gem

I créé un bijou en utilisant bundle gem hello_gem. J'ai ajouté exemple de code à hello_gem.rb

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

Ma structure de dossier est comme suit.

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

J'ai ensuite créé la gemme en utilisant rake install. Puis j'ai commencé irb et je peux exécuter après.

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 > 

Le problème vient lorsque je voulais déplacer le code vers le dossier lib. J'ai créé lib/hello_gem/base.rb et ajouté le code ci-dessus. Et dans le hello_gem.rb je viens d'utiliser require "hello_gem/base". Maintenant, mon projet ressemble à ceci.

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

Lorsque je construis la pierre précieuse en utilisant rake install et utiliser irb pour tester l'erreur suivante est arrivé.

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 > 

Je ne peux pas trouver un moyen de résoudre ce problème. Ce serait une aide précieuse si quelqu'un pouvait me dire ce que je fais de mal ici.

Merci d'avance.

+0

Impossible de reproduire: http://pastie.org/5805403. Etes-vous sûr d'avoir ouvert un IRB frais pour le test? –

Répondre

4

Le .gemspec créé par bundle gem utilise Git pour déterminer les fichiers à inclure dans la gemme; il contient la ligne:

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

Pour cela pour ajouter votre hello_gem/base.rb vous devez l'ajouter au dépôt Git. Depuis l'installation fonctionne pour vous, je suppose que vous avez Git installé d'origine, vous avez juste besoin d'exécuter:

git add lib/hello_gem/base.rb 

Vous n'avez pas réellement besoin de commettre le fichier pour git ls-files pour le ramasser et l'ajouter à la perle , cela devrait donc suffire à le faire fonctionner.

+0

Ah, je me souviens maintenant. J'ai eu ce problème avec ma propre gemme il y a quelque temps. :) –

+1

OMG! ... Ça a vraiment marché :). Je viens de publier l'exemple de code sur [github] (https://github.com/sandarenu/hello_gem), avant de vérifier votre réponse. Maintenant ça marche. Je luttais avec ce problème pendant plusieurs heures. Aucun des didacticiels que j'ai vérifiés n'a pas eu ce problème spécifié. Merci beaucoup. –