2010-09-30 10 views
14

Windows'da Win cmd'den Cygwin'e geçiş yapmak için trys bir Ruby programcısıyım, ancak Ruby mücevherlerinin toplu dosyalarını yürütemiyorum.RubyGems + Cygwin: ruby.exe tarafından bulunmayan POSIX yolu

Herhangi bir bin dizini zaten Windows PATH env içine doldurdum. Yürütülebilir dosyaların depolandığı Ruby kutusu dahil olmak üzere değişken. örneğin çağrı

[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 

: Mücevher Ancak POSIX yolları aşağıdaki soruna yol açar ruby.exe kendisi tarafından çağırılan ./gem doğrudan yolu belirterek, bulunabilir ve çalıştırılabilir.

Herhangi bir fikrin var mı?

Düzenleme:

nasıl toplu dosyalarını işleme değil cygwin anlatmak için?

+0

Bkz 'adam Cygpath' yararlı bir şey olup olmadığını görmek için. –

+0

Diğer cevaptaki (+12 oyla) cevabı değiştirmeye ne dersiniz? –

+0

Bunu doğrulayamıyorum çünkü artık Windows kullanmıyorum. Bunu bir topluluk sorusuna veya başka bir şeye yapabilir miyiz? – crispy

cevap

1

Tümüyle sevmediği Cygwin ile yerel yollar bekleyen yığın dosyalarını karıştırmaya çalışıyorsunuz.

Aradığınızda ./gem'i çağırdığınızda, yakut komut dosyasını çağırıyorsunuz, ancak PATH kullanmak toplu iş dosyasını çağırıyor.

Ya cygwin'e toplu iş dosyalarını (dunno) nasıl işleneceğini söylemez ya da cmd.exe'nin yerini almak istediğinizde MSYS Bash'i kullanırsınız, ancak Cygwin'i yerel Ruby ile karıştırmayın.

Geçmişte karıştırma ve eşleştirme hakkında blogged ettik:

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

+1

Tamam ... blog sayfanızı okuyordum ... Cygwin'in birlikte gelen Ruby sürümünü nasıl kullanırdım ... ve bunu yapmanın dezavantajları ne olurdu? Cygwin ortamında yerel uzantılara dayanan diğer araçları da ekleyebilir miyim? ImageMagick, nokogiri, vb, vb? Bu yavaş şeyler mi? Yoksa başka sorunlarla mı karşılaşacağım? – crispy

+1

Evet, daha yavaş olacak ve evet, derlenmiş kod farklı olduğu için cygwin Ruby altındaki her şeyi yüklemeniz gerekecek. –

+0

Bir tavsiye MSYS kullanır, çünkü sadece bash'a ihtiyacınız varsa, o zaman her şeyde cygwin'in yavaşlığına ihtiyacınız yoktur. –

59

karıştırıp Eğer dikkatli ve bunun için iyi sebepler varsa mingw32 Ruby ile Cygwin eşleşebilir. Cygwin, MSYS'den daha iyi bir CLI ortamı sağlar ancak Cygwin'in birleştirilmiş Ruby'si, MingW32 versiyonundan çok daha yavaştır. Bu hile Cygwin .bashrc'deki tüm RubyGem sarmalayıcılarını taklit etmektir. İşte benim bir parçacığım.

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

Gerçek cevap budur. Çok teşekkürler! Çevremimi güzelce çalıştırmaya başladım, bu yüzden windows cmd.exe kabuğunu hendeleyebilirim. –

+0

Bu düzeltmenin bu soruna katılıyorum (sadece bir an önce başımı kurtardım) ama Luis'in gerçek cevabı olduğunu düşünüyorum. Bunlar bir sonraki probleme kadar sadece durduruyor. – Chris

+1

Tüm bu yıllardan sonra hala durdunuz ... –

17

hile Robert onun cevabını da belirttiği gibi tüm .bat dosyaları diğer ad etmektir. Her gem install sonra senin .bashrc veya .zshrc için yeni bir takma adı eklenmesi

nedenle ben Ruby'nin bindir tarayarak otomatik bu takma ad oluşturmak ... gerçi eğlenceli değil:

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

eklemek için yararlı buldum, bunu yapmanın yolu! senaryo için teşekkürler. –

+3

Teşekkürler! Ama sanırım ikinci dize olmalıdır RUBY_BIN = $ (cygpath -u $ (ruby -e 'koyar RbConfig :: CONFIG ["bindir"]') | tr -d '\ r') – theotheo

+0

Kullandığım bir windows kutusunda babun/zsh ile, bulma başarısız oldu, bu yüzden | tr -d '\ r' parçasını buldu ve $ {RUBY_BIN: -1} – Oswaldo