2014-12-27 31 views
5

SCENARIOOcra genera errori quando l'imballaggio uno script

Ho installato il pacchetto Ruby 2.1.5 (x64) poi ho installato il Ocra gemma con successo:

gem install ocra 
Fetching: ocra-1.3.3.gem (100%) 
Successfully installed ocra-1.3.3 
Parsing documentation for ocra-1.3.3 
Installing ri documentation for ocra-1.3.3 
Done installing documentation for ocra after 0 seconds 
1 gem installed 

PROBLEMA

Sto provando a fare un esame di prova IPT:

# -*- coding: UTF-8 -*- 

# require '' 
exit if Object.const_defined?(:Ocra) 

print "Hello World!" 
sleep 3 

__END__ 

Ma quando provo ad usare Ocra, esso genera errori:

ocra "TestScript.rb" 

=== Loading script to check dependencies 
=== Detected gem ocra-1.3.3 (loaded, files) 
===  6 files, 190931 bytes 
=== Detected gem io-console-0.4.2 (loaded, files) 
C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra:86:in `open': 
No such file or directory @ dir_initialize - C:/Program Files/Ruby/lib/ruby/gem 
s/2.1.0/gems/io-console-0.4.2 (Errno::ENOENT) 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
86:in `entries' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
86:in `entries' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
92:in `find_all_files' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
665:in `block (2 levels) in find_gem_files' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
658:in `each' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
658:in `block in find_gem_files' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
611:in `each' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
611:in `find_gem_files' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
728:in `build_exe' 
     from C:/Program Files/Ruby/lib/ruby/gems/2.1.0/gems/ocra-1.3.3/bin/ocra: 
1165:in `block in <top (required)>' 

DOMANDA

Perché accade questo? Come sistemarlo?

risposta

1

tl; dr: Sono riuscito a creare un file eseguibile dal proprio script utilizzando Ocra con Ruby versione 2.0.0p481 e rubygems 2.0.14. Se puoi cambiare le versioni di Ruby, dovresti essere in grado di ottenere gli stessi risultati. (Here's a write-up I did on using multiple Ruby versions on Windows with the awesome uru.)

Deeper Dive:

Questo problema io-console ha turbato molti utenti della gemma Ocra, e non v'è attualmente un problema aperto per esso su github:

https://github.com/larsch/ocra/issues/77

Ocra chiama Gem::Specification#gem_dir su tutte le gemme caricate nel tuo script, che include io-console. Quell'operazione restituisce un percorso che non esiste, quindi l'errore.

(Ecco un link al metodo gem_dir da RubyGems troppo, per il vostro riferimento.)

Potete provare voi stessi:

irb(main):001:0>require "io/console" 
=> true 
irb(main):002:0>io_console_spec = Gem.loaded_specs["io-console"] 
=> #<Gem::Specification:0xblahblah io-console-0.4.2> 
irb(main):003:0>proposed_path = io_console_spec.gem_dir 
=> "$YOUR_RUBY_DIRECTORY/lib/ruby/gems/2.1.0/gems/io-console-0.4.2" 
irb(main):004:0>File.directory? proposed_path 
=> false 

Ocra creato un eseguibile da questo script con successo quando si utilizza Rubino 2.0.0p481:

ocra-success

Questo mi porta a credere che il risultato di 012.è cambiato da qualche parte tra rubygems 2.0.14 (che è la versione in esecuzione sul mio build 2.0.0p481) e rubygems 2.2.2 (che è la versione in esecuzione sul mio build 2.1.5). Andando in fondo al motivo per cui Gem::Specification#gem_dir per io-console è qualcosa su cui lavorerò di più (sono molto nuovo per il funzionamento interno di Ocra e Rubygems), ma spero che questo sia stato utile.

2

Il problema deriva dall'installazione di irb1.8 e NON del pacchetto di dipendenze irb. per risolvere il problema basta fare un "apt-get install irb" se hai già installato irbl.8.

+0

Grazie ma non ho esperienza con Ruby, non ho capito come risolvere il problema, dovrei mettere questo comando nella console ruby? – ElektroStudios

+0

Sono sotto Windows – ElektroStudios