RubyGems + Cygwin: путь POSIX не найден ruby.exe

Я программист Ruby в Windows, который пытается переключиться с Win cmd на Cygwin, но не может добиться выполнения пакетных файлов из драгоценных камней Ruby.

Я уже набил любой каталог bin в Windows PATH env. переменная, включая bin Ruby, где хранятся исполняемые файлы. Драгоценные камни, однако, вызываются самим ruby.exe, что приводит к следующей проблеме с путями 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

При вызове, например. ./gem напрямую, указав путь, его можно найти и выполнить.

Любые идеи?

Edit:

Как сказать cygwin не обрабатывать пакетные файлы?

Ответы

Ответ 1

Вы пытаетесь смешивать пакетные файлы, которые ожидают родные пути с Cygwin, которые полностью не нравятся.

При вызове. /gem вы вызываете ruby ​​ script, но с помощью PATH вызывается командный файл.

Либо вы укажете cygwin не обрабатывать пакетные файлы (dunno how), либо используете MSYS Bash, если вы хотите заменить cmd.exe, но не смешивайте Cygwin с родным Ruby.

Я писал о смешении и сопоставлении в прошлом:

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

Ответ 2

Вы можете смешивать и сопоставлять Cygwin с MingW32 Ruby, если вы осторожны, и есть веские причины для этого. Cygwin предоставляет более сложную среду CLI, чем MSYS, но Cygwin в комплекте Ruby намного медленнее, чем версия MingW32. Хитрость заключается в том, чтобы скрыть все обертки RubyGem в вашем Cygwin.bashrc. Вот отрывок из моего.

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'

Ответ 3

Трюк заключается в том, чтобы псевдоним всех файлов .bat, как указал Роберт в своем ответе.

Добавление нового псевдонима к вашим .bashrc или .zshrc после каждого gem install не является забавным, хотя...

Поэтому я создаю эти псевдонимы автоматически, сканируя Ruby 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