将ruby脚本编译成exe?

Jon*_*fus 14 ruby exe compilation watir

是否可以在Windows上将ruby脚本编译为.exe?我到处搜索过,我尝试了以下内容(看起来像RubyScript2EXE,鞋子和箱子似乎都死了或被遗弃了.):

  1. http://ocra.rubyforge.org/
  2. http://exerb.sourceforge.jp/index.en.html

我在一个干净的系统上使用Windows 7旗舰版(64位)上的Ruby 1.8.7我这样做:

  1. 从rubyinstaller.org安装RubyInstaller 1.8.7-p358
  2. 宝石安装watir
  3. 宝石安装ocra
  4. git clone git://github.com/snaury/exerb-mingw.git
  5. cd exerb-mingw
  6. ruby setup.rb

我有一个相当简单的脚本来执行此操作:

require 'rubygems'
require 'watir'
browser = Watir::Browser.new
browser.goto 'http://slashdot.org'
Run Code Online (Sandbox Code Playgroud)

当我运行Ocra时,我没有收到任何错误消息,也没有任何反应:

ocra --output test.exe test.rb
=== Loading script to check dependencies
Run Code Online (Sandbox Code Playgroud)

Exerb似乎是一个更好的解决方案,因为它编译为rbc,它确实做了一些事情:

ruby -r exerb/mkexy test.rb
# Window pops up and after I close it it writes out test.exy
C:\Users\jonathan\dev\Citation>exerb test.exy
C:/Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb:146:in `add_file_entry': test.
exy: no such file -- C:/Ruby187/lib/ruby/gems/1.8/gems/win32-api-1.4.8-x86-mingw32/lib/win32/ruby18/win32/api.so (RuntimeError)
    from C:/Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb:86:in `create_archive'
    from C:/Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb:85:in `each'
    from C:/Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb:85:in `create_archive'
    from C:/Ruby187/bin/exerb.bat:67:in `main'
    from C:/Ruby187/bin/exerb.bat:196
Run Code Online (Sandbox Code Playgroud)

所以找不到win32/api.so.当我查看C:/Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb时,看起来宝石不在搜索路径中:

DIR: C:/Users/jonathan/dev/Citation
DIR: C:/Ruby187/lib/ruby/site_ruby/1.8
DIR: C:/Ruby187/lib/ruby/site_ruby/1.8/i386-msvcrt
DIR: C:/Ruby187/lib/ruby/site_ruby
DIR: C:/Ruby187/lib/ruby/vendor_ruby/1.8
DIR: C:/Ruby187/lib/ruby/vendor_ruby/1.8/i386-msvcrt
DIR: C:/Ruby187/lib/ruby/vendor_ruby
DIR: C:/Ruby187/lib/ruby/1.8
DIR: C:/Ruby187/lib/ruby/1.8/i386-mingw32
DIR: .
Run Code Online (Sandbox Code Playgroud)

所以在挖掘后我发现你可以在exy文件中添加搜索路径,如下所示:

path:
  - C:/Ruby187/lib/ruby/gems/
  - C:/Ruby187/lib/ruby/gems/1.8
  - C:/Ruby187/lib/ruby/gems/1.8/gems
Run Code Online (Sandbox Code Playgroud)

在此之后它确实在search_path中显示了这些路径,但它仍然给出了同样的错误.显然必须有一些方法可以将rubygems路径包含在exy中吗?

那么,如今有人在Windows上如何构建.exe?

我在Exerb上取得了一些进展,我发现你可以使用-rrubygems选项运行mkexy来实现这一点.这对于大多数ruby项目来说都很有用.我已经尝试过一些ruby脚本,这些脚本使用了许多不同的库而没有任何问题.例如:

mkexy -rrubygems test.rb
exerb test.exy
test.exe === WORKS!
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不适用于watir.当我运行使用watir构建的.exe时,我得到以下内容:

s4t-utils/claims.rb:24:in `user_is_bewildered': Error in the default values: :br
Run Code Online (Sandbox Code Playgroud)

owser的值必须是'safari','firefox'或'ie'中的一个,并且''看起来不合适.(StandardError的)

Mar*_*mas 3

根据 Ocra 文档,您可以通过检查常量来阻止您的应用程序在 ocra 编译期间运行Ocra

require 'rubygems'
require 'watir'

if not defined?(Ocra)
  browser = Watir::Browser.new
  browser.goto 'http://slashdot.org'
end
Run Code Online (Sandbox Code Playgroud)

也许这将有助于完成编译。