簡體   English   中英

將ruby腳本編譯成exe?

[英]Compile ruby script into exe?

是否可以在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'

當我運行Ocra時,我沒有收到任何錯誤消息,也沒有任何反應:

ocra --output test.exe test.rb
=== Loading script to check dependencies

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

所以找不到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: .

所以在挖掘后我發現你可以在exy文件中添加搜索路徑,如下所示:

path:
  - C:/Ruby187/lib/ruby/gems/
  - C:/Ruby187/lib/ruby/gems/1.8
  - C:/Ruby187/lib/ruby/gems/1.8/gems

在此之后它確實在search_path中顯示了這些路徑,但它仍然給出了同樣的錯誤。 顯然必須有一些方法可以將rubygems路徑包含在exy中嗎?

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

我在Exerb上取得了一些進展,我發現你可以使用-rrubygems選項運行mkexy來實現這一點。這對於大多數ruby項目來說都很有用。 我已經嘗試過一些ruby腳本,這些腳本使用了許多不同的庫而沒有任何問題。 例如:

mkexy -rrubygems test.rb
exerb test.exy
test.exe === WORKS!

不幸的是,它不適用於watir。 當我運行使用watir構建的.exe時,我得到以下內容:

s4t-utils/claims.rb:24:in `user_is_bewildered': Error in the default values: :br

owser的值必須是'safari','firefox'或'ie'中的一個,並且''看起來不合適。 (StandardError的)

我想我找到了答案! 關於缺少win32 / api.so的錯誤消息是因為mkexy正在創建一個無效的exy文件。 檢查第303行看起來它的格式不正確。 我把它更正為:

win32/api.so:
    file: C:/Ruby187/lib/ruby/gems/1.8/gems/win32-api-1.4.8-x86-mingw32/lib/win32/ruby18/win32/api.so
    type: extension-library

現在它有效。 當我運行它時,我仍然得到關於“用戶感到困惑”的消息。 解決方法是添加:

Watir::Browser.default = "ie"

到腳本。 接下來還有一些缺少庫,exerb沒有添加。 我還沒有弄清楚如何使它們出現,但你可以將它們復制到exe的路徑並且它可以工作。

cp -r C:/Ruby187/lib/ruby/gems/1.8/gems/win32-api-1.4.8-x86-mingw32/lib/win32/ .
cp -r C:/Ruby187/lib/ruby/gems/1.8/gems/watir-2.0.4/lib/watir .

問題消失,腳本執行! 此外,您可以使用UPX打包它。

upx --best test.exe

它變成了500kb的文件! 使用UPX +這個額外的東西,整個應用程序將只有650kb左右。 我用ocra制作的腳本不到1Mb。 更不用說它確實是錯誤的,並且如果它崩潰,會在隨機位置留下.rb文件。

我想通過對.exy文件進行一些調整,我可以將其包含在所有文件中。 如果我找到它,我會用答案更新這個問題。

根據Ocra文檔,您可以通過檢查Ocra常量來阻止您的應用程序在ocra編譯期間運行:

require 'rubygems'
require 'watir'

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

也許這將有助於完成編譯。

Ruby非常輕巧,我從不介意在另一個系統上安裝它。 我可以看到想要避免處理所有的devkits和諸如此類的東西,但你可以創建一個圖像並復制它,對系統環境進行一些小的改動。

我正在尋找同樣的事情,2014年8月這是我能找到的最好的:

這個鏈接在做/做或以其他方式貢獻的主要項目上有很好的歷史: https//www.ruby-toolbox.com/categories/packaging_to_executables

據我所知,有兩個主要的,OCRA(僅適用於Windows)和Releasy(基於OCRA,但據我所知,可用於mac和linux)

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

https://github.com/Spooner/releasy/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM