2012-04-03 2 views
14

Возможно ли скомпилировать скрипт ruby ​​в .exe в Windows? Я искал везде, и я попытался следующее (Это выглядело как RubyScript2EXE, обувь и Crate все казалось мертвым или заброшены.):Скомпилировать скрипт ruby ​​в exe?

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

Я использую рубин 1.8.7 на Windows 7 Ultimate (64-бит). из чистой системы я делаю это:

  1. Установка RubyInstaller 1.8.7-P358 от rubyinstaller.org
  2. камень установить Watir
  3. камень установить Ocra
  4. GIT клон мерзавца: //github.com/snaury/exerb-mingw.git
  5. кд exerb-MinGW
  6. рубин 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?

Итак, как в наши дни кто-то создает .exe в Windows?

Я сделал некоторый прогресс с Exerb, я узнал, что вы можете запустить mkexy с параметром -rrubygems, чтобы вытащить это. И это работает GREAT для большинства проектов ruby. Я попробовал это для нескольких рубиновых скриптов, которые без проблем используют несколько разных библиотек. Например:

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

К сожалению, это не работает для watir. Когда я запускаю exe-файл, построенный с Watir я получаю следующее: значение

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

owser должен быть один из «сафари», «светлячок», или «т», и «» не выглядит R IGHT ,(StandardError)

+0

Возможно, вы можете попробовать следующее: http://johnallen.us/?p=278 –

+0

Вы видели консоль, порожденную Ocra? Если вы скомпилировали .rb вместо .rbw, вы должны были его увидеть. –

+0

Я ничего не видел, ни окна, ни ничего. Возможно, это появилось сообщение об ошибке, упомянутое в ссылке johnallen.us, а затем умерло? Я буду экспериментировать с ocra завтра и обновить этот вопрос. –

ответ

3

Согласно документации Ocra, вы можете предотвратить приложение от запуска во время компиляции Ocra проверяя константу Ocra:

require 'rubygems' 
require 'watir' 

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

Возможно, это поможет пройти через компиляцию.

0

Ruby настолько легкий, что я не хотел его устанавливать на другой системе. Я вижу, что хочу избегать общения со всеми devkits и еще много чего, но вы можете создать образ и скопировать его с небольшими незначительными изменениями в системную среду.

4

Я думаю, что нашел ответ! Сообщение об ошибке 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

становится файл 500Кб! С UPX + этот дополнительный материал, все приложение будет всего 650kb или около того. Никакой скрипт, который я мог бы сделать с ocra, был меньше 1 Мб. Не говоря уже о том, что он действительно глючит и оставляет файлы .rb в случайных местах, если он сбой.

Я думаю, что с некоторой настройкой файла .exy я могу включить в него все файлы. Я верну этот вопрос с ответом, если найду его.

0

Я искал то же самое и в августе 2014 года, это лучшее, что я мог бы найти:

Эта ссылка имеет хорошую историю об основных проектах, которые сделали/сделать или иным образом способствовали: https://www.ruby-toolbox.com/categories/packaging_to_executables

насколько я могу сказать, что есть две основные из них, OCRA (работает только на окнах) и Releasy (на основе OCRA, но работает на Маках и Linux, насколько я могу сказать)

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

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

Смежные вопросы