2015-01-06 11 views
8

Sto tentando di creare una gemma di Ruby utilizzando le istruzioni allo http://guides.rubygems.org/make-your-own-gem/. Quanto segue sembra funzionare correttamente e viene generato un file * .gem.Creazione di una gemma di rubino - Impossibile caricare tale file

gem build mygem.gemspec 

Quanto segue sembra anche essere successo (solo se preceduta da sudo):

sudo gem install mygem-0.0.1.gem 

Tuttavia, quando tento di require 'mygem' all'interno irb, ottengo il seguente errore:

LoadError: cannot load such file -- mygem 

Ho visto errori simili su Stackoverflow ma non sono stato in grado di capire cosa non va nella mia specifica situazione. Sono in grado di richiedere altre gemme (non mie) senza problemi. La mia gemma si presenta nell'output di gem list ma non verrà caricata con require.

FWIW Sto usando rbenv, che è nuovo di zecca per me.

Ecco l'output di gem env:

  • RubyGems VERSIONE: 2.4.5

    • RUBY VERSIONE: 2.1.5 (2014/11/13 livello di patch 273) [x86_64-darwin14 0,0]

    • CARTELLA DI INSTALLAZIONE: /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0

    • RUBY EXECUTABLE: /Users/speersj/.rbenv/versions/2.1.5/bin/ruby

    • directory eseguibile: /Users/speersj/.rbenv/versions/2.1.5/bin

    • SPEC CACHE DIRECTORY: /Users/speersj/.gem/specs

    • CONFIGURAZIONE DEL SISTEMA DIRECTORY: /Users/speersj/.rbenv/versions/2.1.5/etc

    • RubyGems PIATTAFORME:

    • rubino

    • x86_64-darwin-14

    • PERCORSI GEM:

      • /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1. 0

      • /Users/speersj/.gem/ruby/2.1.0

    • GEM CONFIGURAZIONE:

      • : update_sources => true

      • : verbose => true

      • : backtrace => false

      • : bulk_threshold => 1000

    • sorgenti remote:

    • SHELL PATH:

      • /Users/speersj/.rbenv/versions/2.1.5/bin

      • /Users/speersj/.rbenv/libexec

      • /Users/speersj/.rbenv/plugins/ruby-build/bin

      • /Users/speersj/.rbenv/shims

      • /Users/speersj/.rbenv/bin

      • /Libreria/Framework/Python.framework/Versions/3.4/bin

      • /usr/local/bin

      • /usr/local/sbin

      • /usr/local/Heroku/bin

      • /usr/local/bin

      • /usr/bin

      • /bin

      • /usr/sbin

      • /sbin

      • /usr/local/bin

      • /usr/local/smlnj/bin

Gemspec:

+0

Quali sono i contenuti della directory 'lib'?La tua gemma ha un file chiamato 'mygem'? – matt

+0

lib contiene un paio di file che definiscono le classi e include anche un file mygem.rb che richiede il resto dei file in lib. – speersj

+0

Prova ad installare la gemma senza 'sudo'? –

risposta

13

L'ingresso spec.files non include il file mygem.rb, in modo che il file non si trovi nella gemma quando viene creato. Solo i file elencati in questa voce saranno inclusi nell'ultima gemma.

La soluzione più semplice sarebbe quella di aggiungere solo mygem.rb alla matrice:

spec.files = ['lib/command.rb', 'lib/connection.rb', 'lib/mygem.rb'] 

Questo è un abbastanza semplice correzione, si potrebbe desiderare di fare qualcosa di più flessibile, come l'utilizzo di un Dir glob:

spec.files = Dir['lib/**/*.rb'] 

Infatti il ​​Rubygems guide suggests you do something like this (il testo è dalla fine di quella sezione):

If you’ve added more files to your gem, make sure to remember to add them to your gemspec’s files array before publishing a new gem! For this reason (among others), many developers automate this with Hoe , Jeweler , Rake , Bundler , or just a dynamic gemspec .


Inoltre, è davvero necessario correggere il permissions problem, non è necessario sudo per installare gemme nella propria directory home.

+0

Grazie, ho completamente perso l'aggiunta del file più ovvio! Dir glob da ora in poi. Apprezzo che tu mi abbia indirizzato nella giusta direzione: i permessi, dovendo usare sudo, non mi sembravano giusti. – speersj

2

Non è possibile utilizzare sudo per installare un gioiello quando si utilizza rbenv (o RVM), ad eccezione delle installazioni di tipo "multiutente" o "di sistema" che sono specializzate e molto di rado quali normali/regolari gli utenti dovrebbero usare

sudo estrapola i privilegi di root e root non ha conoscenza dei Rubies in ambiente rbenv di un utente. Di conseguenza, root utilizzerà il sistema predefinito Ruby, che installerà i file lì.

Invece, utilizzare uno gem install di base, che farà la cosa giusta.

0

Assicurati di aver aggiunto tutti i file modificati in github repo prima di creare il tuo gioiello e poi installa il gioiello di costruzione.

Problemi correlati