2012-04-03 14 views
14

क्या रूबी स्क्रिप्ट को विंडोज़ पर .exe में संकलित करना संभव है? मैं हर जगह खोज की है और मैं निम्नलिखित की कोशिश की है (यह RubyScript2EXE की तरह देखा, जूते और क्रेट सभी मृत या परित्यक्त लग रहा था।):एक्सबी में रूबी स्क्रिप्ट संकलित करें?

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

मैं रूबी उपयोग कर रहा हूँ

  1. rubyinstaller.org से RubyInstaller 1.8.7-p358 स्थापित करें: विंडोज 7 परम (। 64 बिट) एक स्वच्छ सिस्टम से मैं यह कर पर 1.8.
  2. मणि स्थापित watir
  3. मणि स्थापित ocra
  4. Git क्लोन 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 चलाने मैं किसी भी त्रुटि संदेश नहीं मिलता है, और कुछ नहीं होता:

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 नहीं मिल सकता है:

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

Exerb एक बेहतर समाधान की तरह लगता है के बाद से यह आरबीसी को संकलित करता है, और यह करता है वास्तव में कुछ करना। जब मैं सी में देखो: /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 में इन पथ दिखाएं करता है, लेकिन यह अभी भी मुझे एक ही त्रुटि देता है। स्पष्ट रूप से exy में rubygems पथ शामिल करने के लिए कुछ रास्ता होना चाहिए?

तो, कोई इन दिनों विंडोज़ पर .exe कैसे बनाता है?

मैंने एक्सरब के साथ कुछ प्रगति की, मुझे पता चला कि आप इसे खींचने के लिए -rrubygems विकल्प के साथ mkexy चला सकते हैं। और यह सबसे रूबी परियोजनाओं के लिए बढ़िया काम करता है। मैंने कुछ रूबी स्क्रिप्ट्स के लिए कोशिश की है जो समस्याओं के बिना कई अलग-अलग पुस्तकालयों का उपयोग करते हैं। उदाहरण के लिए:

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

दुर्भाग्य से, यह वॉटर के लिए काम नहीं करता है। जब मैं एक .exe watir मैं निम्नलिखित मिल के साथ बनाया गया चलाएँ:

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

owser के मूल्य 'सफारी', 'फ़ायरफ़ॉक्स', या 'यानी' में से एक, होना चाहिए और '' आर नहीं लगती है ight ।(StandardError)

+0

शायद आप इसे आजमा सकते हैं: http://johnallen.us/?p=278 –

+0

क्या आपने ओक्र्रा द्वारा बनाए गए कंसोल को देखा था? यदि आपने .rbw के बजाय .rb संकलित किया है तो आपको एक देखना चाहिए था। –

+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

रूबी इतना हल्का वजन है कि मैंने इसे किसी अन्य सिस्टम पर स्थापित करने पर कभी ध्यान नहीं दिया। मैं देख सकता हूं कि सभी देवताओं और क्या नहीं, बल्कि आप एक छवि बना सकते हैं और सिस्टम वातावरण में कुछ मामूली परिवर्तनों के साथ इसकी प्रतिलिपि बना सकते हैं।

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" 

स्क्रिप्ट में। इसके बाद अभी भी कुछ गायब पुस्तकालय हैं जो एक्सरब जोड़ नहीं रहा है। मुझे अभी तक पता नहीं लगाया गया है कि उन्हें कैसे दिखाना है, लेकिन आप उन्हें केवल एक्सई के पथ पर कॉपी कर सकते हैं और यह काम करता है।

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 --best test.exe

यह 500 KB फ़ाइल बन जाता है! यूपीएक्स + के साथ यह अतिरिक्त सामान पूरे ऐप केवल 650 केबी या उससे भी अधिक होगा। ओक्र्रा के साथ मैं कोई स्क्रिप्ट नहीं कर सकता था 1 एमबी से कम था। इस तथ्य का जिक्र नहीं है कि यह वास्तव में छोटी है और यादृच्छिक स्थानों में .rb फ़ाइलों को क्रैश करता है।

मुझे लगता है कि .exy फ़ाइल के कुछ tweaking के साथ मैं इसे सभी फाइलों को शामिल कर सकते हैं। यदि मैं इसे पाता हूं तो मैं इस प्रश्न को उत्तर के साथ अपडेट कर दूंगा।

0

मैं अगस्त 2014 एक ही बात के लिए और के रूप में देख रहा था यह सबसे अच्छा है मैं मिल सकता है: https://www.ruby-toolbox.com/categories/packaging_to_executables

:

यह लिंक मुख्य परियोजनाओं/करने के लिए किया है या नहीं तो योगदान है कि एक अच्छा इतिहास रहा है

जहां तक ​​मेरा बता सकते हैं वहाँ दो मुख्य हैं, OCRA (सिर्फ खिड़कियों पर काम करता है) और Releasy (OCRA पर आधारित है लेकिन जहाँ तक मैं बता सकता Macs और लिनक्स पर काम करता है)

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

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

संबंधित मुद्दे