2014-12-27 28 views
5

情景OCRA包装的脚本时抛出错误

我已经安装了Ruby 2.1.5 (x64)包,那么我已成功安装了Ocra宝石:

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 

问题

我试图收拾一个测试Scr IPT:

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

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

print "Hello World!" 
sleep 3 

__END__ 

但是当我尝试使用OCRA,它抛出的错误:

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

问题

为什么会发生呢?如何解决它?

回答

1

tl; dr:我能够使用Ocra和Ruby 2.0.0p481和rubygems 2.0.14成功地从您的脚本构建一个可执行文件。如果你可以切换Ruby版本,你应该能够得到相同的结果。 (Here's a write-up I did on using multiple Ruby versions on Windows with the awesome uru

深入剖析:

io-console问题已经困扰了OCRA创业板的许多用户,但目前尚未有定论为它在github:

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

Ocra在脚本中的所有加载的宝石上调用Gem::Specification#gem_dir,其中包括io-console。该操作返回一个不存在的路径,因此是错误。

(这里是从的RubyGems的gem_dir方法的链接太多,供您参考。)

你可以尝试一下自己:

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使用Ruby时创建该脚本可执行成功2.0.0p481:

ocra-success

这使我相信,结果在rubygems 2.0.14(这是运行在我的2.0.0p481版本上的版本)和rubygems 2.2.2(这是我在2.1.5版本上运行的版本)之间有所变化。深入探讨为什么Gem::Specification#gem_dir对于io-console是我将要做的更多工作(我对Ocra和Rubygems的内部工作非常陌生),但希望这对我有帮助。

2

该问题源于安装irb1.8 而不是irb依赖包。如果您已经安装了irbl.8,只需执行“apt-get install irb”即可解决问题。

+0

谢谢,但我没有经验使用Ruby,我不明白如何解决这个问题,我应该把该命令在红宝石控制台? – ElektroStudios

+0

我在Windows下 – ElektroStudios