2012-04-03 14 views
14

È possibile compilare uno script ruby ​​in un file .exe su Windows? Ho cercato dappertutto e ho provato la seguente (Sembrava RubyScript2EXE, Scarpe e Crate tutti sembravano morti o abbandonati.):Compilare script in rubino in exe?

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

sto usando Rubino 1.8.7 su Windows 7 Ultimate (64bit.) da un sistema pulito faccio questo:

  1. Installare RubyInstaller 1.8.7-P358 da rubyinstaller.org
  2. 0.123.516,41 mila
  3. gem install watir
  4. gem install ocra
  5. clone git git: //github.com/snaury/exerb-mingw.git
  6. cd exerb-MinGW
  7. rubino setup.rb

ho un abbastanza semplice script che fa questo:

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

Quando eseguo Ocra non ho ricevuto alcun messaggio di errore, e non succede nulla:

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

Exerb sembra una soluzione migliore in quanto si compila RBC, e lo fa in realtà fare qualcosa:

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 

Quindi non riesce a trovare win32/api.so. Quando guardo in C: /Ruby187/lib/ruby/site_ruby/1.8/exerb/recipe.rb sembra che le gemme non sono nel percorso di ricerca:

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

Così, dopo aver scavato in giro ho scoperto che è possibile aggiungere percorsi di ricerca nel file exy in questo modo:

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

Dopo questo lo fa mostrare questi percorsi in search_path, ma mi dà ancora lo stesso errore. Ovviamente ci deve essere un modo per ottenere percorsi di rubygems da includere nell'exy?

Quindi, come fa qualcuno a costruire un file .exe su Windows in questi giorni?

Ho fatto dei progressi con Exerb, ho scoperto che è possibile eseguire mkexy con l'opzione -rrubygems per farlo entrare. E questo funziona GRANDE per la maggior parte dei progetti ruby. L'ho provato per alcuni script ruby ​​che utilizzano un numero di librerie diverse senza problemi. Ad esempio:

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

Sfortunatamente, non funziona per watir. Quando eseguo un exe costruito con watir ottengo il seguente: valore di

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

di owser deve essere uno dei 'safari', 'firefox', o 'cioe', e '' non ha un aspetto r ight .(StandardError)

+0

Forse si può provare questo: http://johnallen.us/?p=278 –

+0

Hai visto una console generata da Ocra? Se hai compilato un file .rb anziché un file .rbw, dovresti averne visto uno. –

+0

In realtà non ho visto niente, nessuna finestra, niente. Forse è spuntato il messaggio di errore menzionato nel link johnallen.us e poi è morto? Sperimenterò di più con ocra domani e aggiornerò questa domanda. –

risposta

3

Secondo la documentazione Ocra, è possibile impedire la vostra applicazione l'esecuzione durante la compilazione OCRA controllando la costante Ocra:

require 'rubygems' 
require 'watir' 

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

Forse questo aiuterà ottenere attraverso la compilazione.

0

Ruby è così leggero che non mi è mai importato installarlo su un altro sistema. Riesco a vedere che voglio evitare di gestire tutti i devkits e quant'altro, ma puoi creare un'immagine e copiarla con un paio di modifiche minori all'ambiente di sistema.

4

Penso di aver trovato la risposta! Il messaggio di errore relativo alla mancanza di win32/api.so è dovuto al fatto che mkexy sta creando un file exy non valido. Controllando la riga 303 sembra che lo formatta in modo errato. L'ho corretto 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 

E ora funziona. Quando lo eseguo, ricevo comunque il messaggio "l'utente è disorientato". La soluzione a questo è aggiungere:

Watir::Browser.default = "ie" 

alla sceneggiatura. Avanti ci sono ancora alcune librerie mancanti che exerb non sta aggiungendo. Non ho ancora capito come farle apparire, ma puoi semplicemente copiarle sul percorso dell'exe e funziona.

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 . 

problema va via e lo script viene eseguito! Inoltre, è possibile utilizzare UPX per comprimerlo.

upx --migliore test.exe

Diventa un file 500kb! Con UPX + questa roba in più l'intera app sarebbe di appena 650kb circa. Nessuno script che potrei fare con ocra era inferiore a 1Mb. Per non parlare del fatto che è davvero buggato e lascia i file .rb in posizioni casuali se si blocca.

Penso che con qualche ritocco del file .exy riesco a includere tutti i file. Aggiornerò questa domanda con la risposta se la trovo.

0

che stavo cercando la stessa cosa e come agosto 2014 questo è il migliore che ho trovato:

Questo legame ha una bella storia sui principali progetti che ha fatto/do o in altro modo hanno contribuito: https://www.ruby-toolbox.com/categories/packaging_to_executables

Per quanto posso dire ci sono due principali, OCRA (funziona solo su Windows) e Releasy (basata su OCRA ma funziona su Mac e Linux, per quanto posso dire)

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

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