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