RubyGems + Cygwin: путь к POSIX не найден программой ruby.exe - PullRequest
14 голосов
/ 30 сентября 2010

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

Я уже вставил любой каталог bin в Windows PATH env,переменная, включая Ruby bin, где хранятся исполняемые файлы.Драгоценные камни, однако, вызываются самим ruby.exe, что приводит к следующей проблеме с путями POSIX:

duddle@duddledan /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)

duddle@duddledan /cygdrive/c/Ruby/ruby-186-398/bin
$ ./gem --version
1.3.7

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

Есть идеи?

Редактировать:

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

Ответы [ 3 ]

59 голосов
/ 23 ноября 2010

Вы можете смешивать и сочетать 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'
18 голосов
/ 17 октября 2013

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

Добавление нового псевдонима к вашему .bashrc или .zshrc после каждого gem install не очень интересно ...

Поэтому я автоматически создаю эти псевдонимы путем сканирования биндира Руби:

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
1 голос
/ 30 сентября 2010

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

Когда вы звоните ./gem, вы вызываете скрипт ruby, но использование PATH вызывает командный файл.

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

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

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

...