Buenas
Hoy vamos a ver como hacer fichero exe en windows con un script ruby.Para python hay py2exe que es muy facil a usar y que anda bien.Para ruby hay ocra y vamos a ver que… no es tan facil a usar que py2exe.
Yo me gusta el ruby por su “syntax” y vamos a ver y solucionar los problemos paso a paso con ocra.
Primero descargar ruby:
https://rubyinstaller.org/downloads/
No hay nada que décir sobre la instalacion es muy sencillo.
Una vez que todo esta instalado hay que instalar algunos “gem” (los gem son las dépendencias del script) es igual que los “modulos” con python.Para poder empezar a hacer codigo en ruby consejo de instalar esos gem:
gem install highline
gem install rake
gem install bundler
gem install timeout
gem install httparty
Se tendra que instalar mas gem si quieres hacer algo mas especial.
Al final instalamos ocra que nos va a convertir un script ruby en exe:
gem install ocra
Y ahora que ? normalmente todo tiene que andar… pero no… ocra es un poco “caprichoso” para que puede andar bien.Me ha tomado tiempo para encontrar en github y stackoverflow las errores y como solucionar las.
Error 1 al momento te iniciar ocra:
ocra test.rb
fiber.so No such file or directory @ rb_sysopen (Errno::ENOENT)
Efectivamente el fichero “fiber.so” no esta en la carpeta de mingw(mingw no sirve a compilar el script ruby en un exe).No sé porqué no esta aqui por defecto pero lo he encontrado en github y le he puesto en mega.nz
Fichero fiber.so a descargar:
https://mega.nz/file/oLMm3bDb#-a2e27jDbcyWYBflMCbiHfSsYui1RzlrH1TtEqnFYbM
Ahora que lo tienes, copia lo en:
C:\Ruby31-x64\lib\ruby\3.1.0\x64-mingw-ucrt
Error 2 al momento de iniciar ocra:
undefined method `relative_path_from' for nil:NilClass (NoMethodError)".
Hay que modificar el fichero ocra en: C:\Ruby31-x64\lib\ruby\gems\3.1.0\gems\ocra-1.3.11\bin linea 930:
Se ve eso:
manifests.each do |manifest|
Ocra.msg "Adding external manifest #{manifest}"
target = manifest.relative_path_from(Host.exec_prefix)
sb.createfile(manifest, target)
end
Y hay que cambiar esa seccion por:
manifests.each do |manifest|
next if manifest.nil?
Ocra.msg "Adding external manifest #{manifest}"
target = manifest.relative_path_from(Host.exec_prefix)
sb.createfile(manifest, target)
end
Eso viene de que el manifest es siempre “nil?” lo que significa que su valor es “0” o “null” en ruby y con “next if manifest.nil?” se inicia una bucla que valida la valor “null” y pasa al siguiente sin problemas.
Una vez que se ha modificado esa parte del fichero ocra se puede registrar el fichero y iniciar otra vez ocra… se hace bien el ficher exe pero al momento de usar lo para hacer una prueba… hay una tercera error con los dll de windows.
Error 3 cuando se inicia el fichero exe creado por ocra se ve une pantalla en windows con:
libssp-0.dll no ha sido encontrado
Eso viene de que ocra no toma automaticamente los dll que se necesita, hay que indicar le que typos de dll usar.Al final para que todo anda bien y hacer una compilacion sin problema hay que usar (ejemplo con un script que he llamado hello.rb):
ocra hello.rb --windows --dll ruby_builtin_dlls\libssp-0.dll --dll ruby_builtin_dlls\libgmp-10.dll --dll ruby_builtin_dlls\libgcc_s_seh-1.dll --dll ruby_builtin_dlls\libwinpthread-1.dll
https://zupimages.net/up/22/40/mddx.png
Y ya tienes tu programo que anda
NOTAS -1: si hace un script ruby de prueba que pone “hello world” se vera 2 cosas:
-1 windows da un nombre en txt aunqué tu script esta en ruby, lo puedes ver con el comando “dir”:
https://zupimages.net/up/22/40/b459.png
Hay que dar el bueno nombre del fichero a “mano”
ren ficheroenruby.rb.txt ficheroenruby.rb
(en mi caso es hello.rb)
https://zupimages.net/up/22/40/zcl0.png
NOTA -2: no aparece nada al iniciar el fichero exe, no se puedo ver el “hello world” que esta en el script.Eso es raro pero no significa que tu script no anda, para verificar que anda bien he pedido al script de crear un fichero “wifilibre.txt” despuès del “hello world”
https://zupimages.net/up/22/40/iwal.png
Y despuès de convertir el script ruby en exe con el comando que he dado antes, se ve bien el fichero wifilibre.txt creado por nuestro nuevo fichero exe (el fichero exe es con el icon de ruby)
https://zupimages.net/up/22/40/wl9q.png
Suelo usar siempre linux para hacer codigos en ruby/python y mi uso personal pero he guardado windows 10 en dual boot para convertir mi scripts en fichero exe.La verdad es que me gusta mas el ruby que el python pero con eso cada uno tiene su opinion y lo comprendo perfectamente.Lo que me da pena es que “ocra” no parece totalmente finito, hay que buscar en la web para poder hacer le andar bien… pero bueno al final no es tan complicado que eso y si has seguido bien ese tutorial lo podras hacer andar
@++