2010-09-30 16 views
14

Sono un programmatore di Ruby su Windows che cerca di passare da Win cmd a Cygwin, ma non è in grado di eseguire file batch di gemme di Ruby.RubyGems + Cygwin: percorso POSIX non trovato da ruby.exe

Ho già inserito qualsiasi directory bin nell'interfaccia di Windows PATH. variabile, incluso il cestino Ruby in cui sono archiviati i file eseguibili. Gemme, tuttavia, vengono richiamati da ruby.exe stesso, che conduce alla seguente problema con percorsi POSIX:

[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 

quando chiamate ad esempio ./gem direttamente specificando il percorso, può essere trovato ed eseguito.

Qualche idea?

Edit:

Come dire cygwin non per elaborare file batch?

+0

Vedi 'man cygpath' per vedere se ha qualcosa di utile. –

+0

Cosa ne pensi di cambiare la risposta nell'altra (+12 voti)? –

+0

Non riesco a convalidarlo perché non uso più Windows. Possiamo fare questo a una domanda della comunità o qualcosa del genere? – crispy

risposta

1

Si sta cercando di mixare file batch che prevedono percorsi nativi con Cygwin, cosa che non gli piace.

Quando si chiama ./gem si sta invocando lo script ruby, ma utilizzando lo PATH si richiama il file batch.

O si dice a cygwin di non elaborare i file batch (non so come) o si utilizza MSYS Bash se si desidera una sostituzione di cmd.exe, ma non mescolare Cygwin con Ruby nativo.

ho bloggato su di miscelazione e la congruenza in passato:

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

+1

Ok ... leggendo il tuo blogpost ... come utilizzerei la versione in bundle di Cygwin in Ruby ... e quali sarebbero gli svantaggi di farlo? Posso/devo installare anche tutti gli altri strumenti basati su estensioni native all'interno dell'ambiente Cygwin? ImageMagick, nokogiri, ecc. Ecc.? Questo rallenta le cose? O incontrerò altri problemi? – crispy

+1

Sì, sarà più lento e sì, sarà necessario installare tutto in Cygwin Ruby perché il codice compilato è diverso. –

+0

Un consiglio è MSYS, perché se hai solo bisogno di bash, allora non hai bisogno della lentezza di cygwin in tutto. –

59

È possibile combinare Cygwin con MingW32 Rubino se siete attenti e ci sono buone ragioni per farlo. Cygwin fornisce un ambiente CLI più dettagliato rispetto a MSYS, ma il Ruby in bundle di Cygwin è molto più lento della versione MingW32. Il trucco è di creare alias tutti i wrapper RubyGem in Cygwin .bashrc. Ecco un frammento dal mio.

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

Questa è la vera risposta. Grazie mille! Ho appena fatto funzionare bene il mio ambiente, quindi potrò sbarazzarmi della shell di windows cmd.exe. –

+0

Sono d'accordo che questa correzione sia questo problema (mi ha salvato un mal di testa solo un momento fa) ma penso che Luis abbia la vera risposta. Questi sono solo fermi fino al prossimo problema. – Chris

+1

Ancora stopgap dopo tutti questi anni ... –

17

Il trucco è quello di alias tutti .bat i file come Robert ha sottolineato nella sua risposta.

L'aggiunta di un nuovo alias per il vostro .bashrc o .zshrc dopo ogni gem install non è divertente se ...

Pertanto Creare questi alias automaticamente attraverso la scansione bindir di Ruby:

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

questo è il modo per farlo! grazie per la sceneggiatura –

+3

Grazie! Ma penso che la seconda stringa dovrebbe essere RUBY_BIN = $ (cygpath -u $ (ruby -e 'mette RbConfig :: CONFIG ["bindir"]') | tr -d '\ r') – theotheo

+0

In una finestra di windows che uso con babun/zsh, la ricerca non funzionava, quindi ho rimosso il comando | tr -d '\ r' pezzo e cambiato il percorso di ricerca in $ {RUBY_BIN:: -1} – Oswaldo

Problemi correlati