2010-09-30 2 views
14

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

Я уже набивал любой каталог 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 не обрабатывать пакетные файлы?

+0

Посмотреть 'человек cygpath', чтобы узнать, есть ли у него что-нибудь полезное. –

+0

Как насчет изменения ответа в другом (+12 голосов)? –

+0

Я не могу проверить его, потому что больше не использую Windows. Можем ли мы сделать это на вопрос сообщества или что-то еще? – crispy

ответ

1

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

При вызове ./gem вы вызываете скрипт ruby, но с помощью 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/

+1

Ок ... читаю ваш блог-постер ... как я могу использовать рубиновую версию Cygwin ... и каковы были бы недостатки этого? Можно ли/Должен ли я также установить все другие инструменты, основанные на собственных расширениях в среде Cygwin? ImageMagick, nokogiri и т. Д. И т. Д.? Это замедляет работу? Или я столкнусь с другими проблемами? – crispy

+1

Да, это будет медленнее, и да, вам нужно будет установить все под cygwin Ruby, потому что скомпилированный код отличается. –

+0

Рекомендация - использовать MSYS, потому что если вам нужен только bash, тогда вам не нужна медлительность cygwin во всем. –

59

Вы можете смешивать и сочетать с Cygwin Mingw32 Руби, если вы внимательны, и есть веские причины для этого. 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' 
+5

Это реальный ответ. Спасибо! Я просто хорошо работал с моей средой, поэтому я смогу разорвать оболочку windows cmd.exe. –

+0

Я согласен, что эта проблема исправлена ​​(спасила мне головную боль всего лишь минуту назад), но я думаю, что у Луиса есть реальный ответ. Это просто остановки до следующей проблемы. – Chris

+1

Постепенная остановка после всех этих лет ... –

17

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

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

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

это способ сделать это! спасибо за скрипт. –

+3

Спасибо! Но я думаю, что вторая строка должна быть RUBY_BIN = $ (cygpath -u $ (ruby -e 'помещает RbConfig :: CONFIG ["bindir"]') | tr -d '\ r') – theotheo

+0

В окне окна я использую с babun/zsh, находка не срабатывала, поэтому я удалил | tr -d '\ r' и изменил путь поиска на $ {RUBY_BIN:: -1} – Oswaldo

Смежные вопросы