2010-09-30 11 views
14

Soy un programador de Ruby en Windows que intenta cambiar de Win cmd a Cygwin, pero no puede lograr ejecutar archivos por lotes de gemas de Ruby.RubyGems + Cygwin: Ruta POSIX no encontrada por ruby.exe

Ya rellené cualquier directorio bin en Windows PATH env. variable, incluido el bin Ruby donde se almacenan los ejecutables. Gems, sin embargo, son invocados por ruby.exe en sí, que conduce a la siguiente problema con los caminos de 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 

Al llamar, por ejemplo, ./gem directamente al especificar la ruta, se puede encontrar y ejecutar.

¿Alguna idea?

Editar:

Cómo saber cygwin no procesar archivos por lotes?

+0

Véase 'hombre cygpath' para ver si tiene algo útil. –

+0

¿Qué tal cambiar la respuesta en el otro (+12 votos)? –

+0

No puedo validarlo porque ya no uso Windows. ¿Podemos hacer esto para una pregunta comunitaria o algo así? – crispy

Respuesta

1

Está intentando mezclar archivos de proceso por lotes que esperan rutas nativas con Cygwin, que no le gusta completamente.

Cuando llamas a ./gem estás invocando la secuencia de comandos de ruby, pero usando el PATH está invocando el archivo por lotes.

O bien le dice a cygwin que no procese archivos de proceso por lotes (no sé cómo) o usa MSYS Bash si desea un reemplazo de cmd.exe, pero no mezcle Cygwin con Ruby nativo.

He blog acerca de mezclar y combinar en el pasado:

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

+1

Ok ... leyendo su blogpost ... ¿cómo usaría la versión incluida de Ruby de Cygwin ... y cuáles serían las desventajas de hacerlo? ¿Puedo/debo instalar también todas las demás herramientas que dependen de extensiones nativas dentro del entorno de Cygwin? ImageMagick, nokogiri, etc., etc.? ¿Eso desacelera las cosas? ¿O me encontraré con otros problemas? – crispy

+1

Sí, será más lento y sí, deberá instalar todo en cygwin Ruby porque el código compilado es diferente. –

+0

Una recomendación es usar MSYS, porque si solo necesitas bash, entonces no necesitas la lentitud de cygwin en todo. –

59

Usted puede mezclar y combinar con Cygwin MingW32 Rubí si se tiene cuidado y hay buenas razones para hacerlo. Cygwin proporciona un entorno de CLI más desarrollado que MSYS, pero el paquete de Ruby de Cygwin es mucho más lento que la versión de MingW32. El truco está en aliar todos los envoltorios de RubyGem en tu Cygwin .bashrc. Aquí hay un fragmento del mío.

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

Esta es la verdadera respuesta. ¡Muchas gracias! Acabo de hacer que mi entorno funcione correctamente, así que podré deshacerme del shell de windows cmd.exe. –

+0

Acepto que esta solución es este problema (me salvó un dolor de cabeza hace un momento) pero creo que Luis tiene la respuesta real. Estos son solo puntos temporales hasta el siguiente problema. – Chris

+1

Todavía falta de tiempo después de todos estos años ... –

17

El truco es poner un alias para todos los archivos .bat como Robert señaló en su respuesta.

Adición de un nuevo alias a su .bashrc o .zshrc después de cada gem install no es divertido, aunque ...

Por lo tanto creo éstos alias de forma automática mediante el escaneo de bindir de 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

¡esta es la manera de hacerlo! gracias por el guion. –

+3

Gracias! Pero creo que la segunda cadena debe ser RUBY_BIN = $ (cygpath -u $ (ruby -e 'pone RbConfig :: CONFIG ["bindir"]') | tr -d '\ r') – theotheo

+0

En un cuadro de ventana que uso con babun/zsh, el hallazgo estaba fallando, así que eliminé el | tr -d '\ r' pieza y cambió la ruta de búsqueda a $ {RUBY_BIN:: -1} – Oswaldo