2010-09-30 14 views
14

मैं विंडोज पर एक रूबी प्रोग्रामर हूं जो Win cmd से Cygwin में स्विच करने की कोशिश करता है, लेकिन रूबी रत्न की बैच फ़ाइलों को निष्पादित करने के लिए प्राप्त नहीं कर सकता है।RubyGems + Cygwin: POSIX पथ ruby.exe द्वारा नहीं मिला

मैंने पहले से ही विंडोज PATH env में किसी भी बिन निर्देशिका को भर दिया है। परिवर्तनीय, रूबी बिन सहित जहां निष्पादन योग्य संग्रहित होते हैं।

[email protected] /cygdrive/c/Ruby/ruby-186-398/bin 
$ gem -v 
C:\Ruby\ruby-186-398\bin\ruby.exe: No such file or directory -- /cygdrive/c/Ruby/ruby-186-398/bin/gem (LoadError) 

[email protected] /cygdrive/c/Ruby/ruby-186-398/bin 
$ ./gem --version 
1.3.7 

जब उदा बुला: रत्न, तथापि, ruby.exe ही है, जो POSIX रास्तों के साथ निम्न समस्या को जन्म देता द्वारा लाया जाता है ./gem सीधे पथ निर्दिष्ट करके, यह पाया और निष्पादित किया जा सकता है।

कोई विचार?

संपादित करें:

cygwin कैसे पता करें कि बैच फ़ाइलों को प्रोसेस करने नहीं?

+0

देखें 'आदमी cygpath' यह देखने के लिए कि क्या यह कुछ उपयोगी है। –

+0

दूसरे में जवाब बदलने के बारे में क्या (+12 वोट)? –

+0

मैं इसे मान्य नहीं कर सकता क्योंकि मैं अब विंडोज का उपयोग नहीं करता हूं। क्या हम इसे किसी समुदाय प्रश्न या कुछ कर सकते हैं? – crispy

उत्तर

1

आप बैच फ़ाइलों को मिश्रण करने की कोशिश कर रहे हैं जो सिग्विन के साथ मूल पथ की अपेक्षा करते हैं, जो इसे पूरी तरह से नापसंद करते हैं।

जब आप कॉल करते हैं ./gem आप रूबी स्क्रिप्ट का आह्वान कर रहे हैं, लेकिन PATH का उपयोग बैच फ़ाइल का आह्वान कर रहा है।

या तो आप साइगविन को बैच फ़ाइलों को संसाधित न करने के लिए कहते हैं (डुनो कैसे) या यदि आप cmd.exe के प्रतिस्थापन चाहते हैं तो आप MSYS Bash का उपयोग करते हैं, लेकिन मूल रूबी के साथ सिग्विन मिश्रण न करें।

मैं मिश्रण और अतीत में मिलान के बारे में ब्लॉग है:

http://blog.mmediasys.com/2008/10/27/handy-tip-dont-mix-one-click-installer-with-cygwin/

+1

ठीक है ... अपने ब्लॉग पोस्ट को पढ़ रहा हूं ... मैं सिगविन के बंडल रूबी संस्करण का उपयोग कैसे करूं ... और ऐसा करने के नुकसान क्या होंगे? क्या मैं सिगविन पर्यावरण के भीतर देशी एक्सटेंशन पर निर्भर अन्य सभी टूल्स भी इंस्टॉल कर सकता/सकती हूं? ImageMagick, nokogiri, आदि, आदि? क्या वह धीमी चीजें नीचे है? या मुझे अन्य समस्याओं का सामना करना पड़ेगा? – crispy

+1

हां, यह धीमा हो जाएगा और हां, आपको सिगविन रूबी के तहत सब कुछ इंस्टॉल करने की आवश्यकता होगी क्योंकि संकलित कोड अलग है। –

+0

एक सिफारिश एमएसवाईएस का उपयोग करती है, क्योंकि अगर आपको केवल बैश की आवश्यकता है, तो आपको सबकुछ में सिगविन की धीमी गति की आवश्यकता नहीं है। –

59

आप मिश्रण और MingW32 रूबी के साथ Cygwin से मेल खाते हैं यदि आप सावधान कर रहे हैं और ऐसा करने के लिए अच्छा कारण हैं कर सकते हैं। साइगविन एमएसवाईएस की तुलना में अधिक फ्लश किए गए सीएलआई पर्यावरण प्रदान करता है लेकिन सिग्विन की बंडल रूबी मिंगडब्ल्यू 32 संस्करण की तुलना में बहुत धीमी है। चाल आपके सिग्विन .bashrc में सभी RubyGem wrappers को उपनाम करना है। यहां से एक स्निपेट है।

alias gem='gem.bat' 
alias rake='rake.bat' 
alias erb='erb.bat' 
alias irb='irb.bat' 
alias rdoc='rdoc.bat' 
alias ri='ri.bat' 
alias rspec='rspec.bat' 
alias cucumber='cucumber.bat' 
alias bundle='bundle.bat' 
+5

यह असली जवाब है। बहुत बहुत धन्यवाद! मैंने अभी अपना पर्यावरण अच्छी तरह से काम कर लिया है, इसलिए मैं विंडोज cmd.exe खोल को कुचलने में सक्षम हो जाऊंगा। –

+0

मैं इस फिक्स की इस समस्या से सहमत हूं (मुझे बस एक पल पहले सिरदर्द बचाया) लेकिन मुझे लगता है कि लुइस का असली जवाब है। ये अगली समस्या तक बस स्टॉपगैप्स हैं। – Chris

+1

इन सभी वर्षों के बाद भी स्टॉपगैप ... –

17

चाल सभी .bat फ़ाइलों अन्य नाम पर के रूप में रॉबर्ट अपने जवाब में बताया है।

हर gem install के बाद अपने .bashrc या .zshrc के लिए एक नया उपनाम जोड़ने से मज़ा हालांकि नहीं है ...

इसलिए मैं रूबी के bindir को स्कैन करके स्वचालित रूप से इन नाम बनाएं:

if [[ -n "$(which ruby 2>/dev/null)" ]]; then 
    RUBY_BIN=$(cygpath -u $(ruby -e 'puts RbConfig::CONFIG["bindir"]') | tr '\r' ' ') 
    for f in $(find ${RUBY_BIN} -regex ".*bat$"| xargs -n1 basename); do 
     alias ${f%.bat}=${f} 
    done 
fi 
+0

यह करने का तरीका है! लिपि के लिए धन्यवाद। –

+3

धन्यवाद! लेकिन मुझे लगता है कि दूसरी स्ट्रिंग होनी चाहिए RUBY_BIN = $ (cygpath -u $ (ruby -e 'RbConfig :: CONFIG ["bindir"]') | tr -d '\ r') – theotheo

+0

विंडोज़ बॉक्स में मैं उपयोग करता हूं बाबुन/zsh के साथ, खोज विफल रहा था, इसलिए मैंने हटा दिया tr -d '\ r' टुकड़ा और $ {RUBY_BIN:: -1} – Oswaldo

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