2012-04-03 10 views
14

¿Es posible compilar un script de ruby ​​en un .exe en Windows? He buscado por todas partes y yo he intentado lo siguiente (Parecía RubyScript2EXE, Zapatos y cajón todos parecían muertos o abandonados.):¿Compilar el script de ruby ​​en exe?

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

estoy usando Rubí 1.8.7 en Windows 7 Ultimate (64 bits.) de un sistema limpio hago esto:

  1. instalo RubyInstaller 1.8.7-P358 de rubyinstaller.org
  2. joya instalar Watir
  3. joya instalar ocra
  4. git clone: ​​//github.com/snaury/exerb-mingw.git
  5. cd exerb-MinGW
  6. rubí setup.rb

tengo un guión bastante simple que hace esto:

require 'rubygems' 
require 'watir' 
browser = Watir::Browser.new 
browser.goto 'http://slashdot.org' 

Cuando corro Ocra no recibo ningún mensaje de error, y no pasa nada:

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

Exerb parece una solución mejor, ya que compila a RBC, y lo hace en realidad hacer algo:

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 

para que no pueda encontrar Win32/api.so. Cuando miro en C: /Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb se ve como gemas no están en la ruta de búsqueda:

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: . 

Así que después de excavar alrededor descubrí que se puede añadir rutas de búsqueda en el archivo exy así:

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

Después de esto lo hace mostrar estos caminos en search_path, pero todavía me da el mismo error. Obviamente, debe haber alguna forma de incluir rutas de rubygems en la exy?

Entonces, ¿cómo alguien construye un .exe en Windows en estos días?

Hice algunos progresos con Exerb, descubrí que puedes ejecutar mkexy con la opción -rrubygems para instalar esto. Y esto funciona EXCELENTE para la mayoría de los proyectos de rubí. Lo he intentado con algunas secuencias de comandos de ruby ​​que usan varias bibliotecas diferentes sin problemas. Por ejemplo:

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

Desafortunadamente, no funciona para watir. Cuando ejecuto un .exe construido con Watir consigo el siguiente: Valor

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

de owser debe ser uno de 'Safari', 'Firefox', o 'es decir', y '' no se ve r vuelo .(StandardError)

+0

Quizás puedas probar esto: http://johnallen.us/?p=278 –

+0

¿Has visto una consola generada por Ocra? Si compiló un .rb en lugar de un .rbw, debería haber visto uno. –

+0

En realidad, no vi nada, ni ventana, nada. Tal vez apareció el mensaje de error mencionado en el enlace johnallen.us y luego murió? Voy a experimentar más con ocra mañana y actualizar esta pregunta. –

Respuesta

3

De acuerdo con la documentación Ocra, se puede evitar que su aplicación se ejecute durante la compilación ocra comprobando la constante Ocra:

require 'rubygems' 
require 'watir' 

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

Tal vez esto ayudará a conseguir a través de la compilación.

0

Ruby es tan liviano que nunca me importó instalarlo en otro sistema. Veo que quiero evitar tratar con todos los devkits y otras cosas, pero puedes crear una imagen y copiarla con un par de pequeños cambios en el entorno del sistema.

4

¡Creo que encontré la respuesta! El mensaje de error sobre la pérdida de win32/api.so se debe a que mkexy está creando un archivo exy no válido. Comprobando la línea 303 parece que formatea incorrectamente. Lo corrigí a:

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 

Y ahora funciona. Cuando lo ejecuto, sigo recibiendo el mensaje sobre "el usuario está desconcertado". La solución a esto es agregar:

Watir::Browser.default = "ie" 

al script. A continuación, todavía hay algunas bibliotecas faltantes que exerb no agrega. Todavía no he resuelto cómo hacer que aparezcan, pero puedes copiarlos en el camino del ejecutor y funciona.

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 . 

¡El problema desaparece y se ejecuta el script! Además, puedes usar UPX para empacarlo.

upx --best test.exe

Se convierte en un archivo de 500kb! Con UPX + estas cosas extra toda la aplicación sería de solo 650kb o menos. Ninguna secuencia de comandos que podría hacer con ocra era inferior a 1Mb. Sin mencionar el hecho de que es muy defectuoso y deja los archivos .rb en ubicaciones aleatorias si se bloquea.

Creo que con algunos ajustes del archivo .exy puedo hacer que incluya todos los archivos. Actualizaré esta pregunta con la respuesta si la encuentro.

0

que estaba buscando lo mismo y en agosto de 2014, es el mejor que pude encontrar:

Este enlace tiene una bonita historia sobre los principales proyectos que hicimos/DO o de otra manera contribuyeron: https://www.ruby-toolbox.com/categories/packaging_to_executables

por lo que yo puedo decir que hay dos principales, OCRA (funciona sólo en windows) y Releasy (basado en OCRA, pero funciona en Mac y Linux por lo que yo puedo decir)

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

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

Cuestiones relacionadas