2014-12-27 26 views
5

SCENARIUSZOCRA wyrzuca błędy przy pakowaniu skrypt

Mam zainstalowany pakiet Ruby 2.1.5 (x64) następnie zainstalowałem Ocra gem pomyślnie:

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 

PROBLEM

Próbuję spakować testowy Scr IPT:

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

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

print "Hello World!" 
sleep 3 

__END__ 

Ale gdy próbuję użyć OCRA, rzuca błędy:

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)>' 

PYTANIE

Dlaczego to się dzieje? Jak to naprawić?

Odpowiedz

1

tl; dr: Udało mi się z powodzeniem zbudować plik wykonywalny ze skryptu za pomocą programu Ocra z wersją Ruby 2.0.0p481 i rubygems 2.0.14. Jeśli możesz zmienić wersje Ruby, powinieneś być w stanie uzyskać te same wyniki. (Here's a write-up I did on using multiple Ruby versions on Windows with the awesome uru.)

Deeper Dive:

Ten io-console Kwestia ta niepokoi wielu użytkowników gem OCRA, a tam jest obecnie kwestią otwartą dla niej na github:

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

Ocra wywołuje Gem::Specification#gem_dir na wszystkich załadowanych klejnotach w skrypcie, które obejmują io-console. Ta operacja zwraca ścieżkę, która nie istnieje, stąd błąd.

(Oto link do sposobu z RubyGems gem_dir też w celach informacyjnych.)

Można go wypróbować siebie:

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 utworzony plik wykonywalny z tego skryptu z powodzeniem przy użyciu Ruby 2.0.0p481:

ocra-success

To prowadzi mnie do przypuszczenia, że ​​w wyniku Gem.loaded_specs zmienił się gdzieś pomiędzy rubygems 2.0.14 (który jest wersją działającą na mojej wersji 2.0.0p481) i rubygems 2.2.2 (która jest wersją działającą na mojej wersji 2.1.5). Zrozumienie, dlaczego dla jest czymś, nad czym będę pracował (jestem bardzo nowy w wewnętrznym działaniu Ocra i Rubygems), ale mam nadzieję, że było to pomocne.

2

Problem wynika z zainstalowania irb1.8 , a NIE pakietu zależności irb. aby rozwiązać problem, po prostu wykonaj "apt-get install irb", jeśli masz już zainstalowany irbl.8.

+0

Dzięki, ale nie mam doświadczenia z Ruby, nie rozumiałem, jak rozwiązać problem, powinienem umieścić to polecenie w konsoli ruby? – ElektroStudios

+0

Jestem pod Windows – ElektroStudios