假想
我已经安装了Ruby2.1.5 (x64)包,然后成功地安装了奥卡拉 gem:
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问题
我正试着打包一个测试脚本:
# -*- 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)>'发问
为什么会发生这种事?怎么修呢?
发布于 2015-01-12 16:31:39
tl;dr: i能够使用RubyVersion2.0.0p481和rubygem2.0.14从脚本中成功地构建一个可执行文件。如果您可以切换Ruby版本,您应该能够获得相同的结果。(下面是我在Windows上使用多个Ruby版本时编写的一个很棒的uru.)
深度潜水:
这个io-console问题困扰了Ocra的许多用户,目前github上有一个尚未解决的问题:
https://github.com/larsch/ocra/issues/77
Ocra在脚本中所有加载的宝石上调用Gem::Specification#gem_dir,其中包括io-console。该操作返回不存在的路径,因此出现错误。
(这里还有一个来自rubygems的目录方法的链接,供您参考。)
你可以自己试试:
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当使用Ruby2.0.0p481时,Ocra成功地从这个脚本创建了一个可执行文件:

这使我相信,Gem.loaded_specs的结果在rubygems 2.0.14 (运行在2.0.0p481构建上的版本)和rubygems 2.2.2 (运行在2.1.5构建上的版本)之间发生了变化。深入了解为什么Gem::Specification#gem_dir for io-console是我将做的更多的事情(我对Ocra和Rubygems的内部工作非常陌生),但希望这是有帮助的。
发布于 2015-01-01 09:38:31
问题源于安装irb1.8,而不是irb依赖程序包。要解决这个问题,只要做一个“apt-获取安装irb”,如果你已经安装了irbl.8。
https://stackoverflow.com/questions/27666901
复制相似问题