2010-09-30 18 views
14

Tôi là một lập trình viên Ruby trên Windows, người đã chuyển từ Win cmd sang Cygwin, nhưng không thể thực hiện các tập tin batch của Ruby gem.RubyGems + Cygwin: Đường dẫn POSIX không được tìm thấy bởi ruby.exe

Tôi đã nhồi bất kỳ thư mục bin nào vào Windows PATH env. biến, bao gồm thùng chứa Ruby nơi các tệp thi hành được lưu trữ. Đá quý, tuy nhiên, được gọi bởi ruby.exe, dẫn đến sự cố sau đây với đường dẫn 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 

Khi gọi điện, ví dụ: ./gem trực tiếp bằng cách xác định đường dẫn, nó có thể được tìm thấy và thực hiện.

Bất kỳ ý tưởng nào?

Edit:

Làm thế nào để nói với Cygwin không để xử lý các tập tin batch?

+0

Xem 'người đàn ông cygpath' để xem nó có ích gì không. –

+0

Điều gì sẽ thay đổi câu trả lời trong câu trả lời khác (+12 phiếu bầu)? –

+0

Tôi không thể xác thực vì tôi không sử dụng Windows nữa. Chúng ta có thể biến điều này thành một câu hỏi cộng đồng hay gì đó không? – crispy

Trả lời

1

Bạn đang cố gắng kết hợp các tệp hàng loạt kỳ vọng các đường dẫn gốc với Cygwin, hoàn toàn không thích nó.

Khi bạn gọi ./gem bạn đang gọi tập lệnh ruby, nhưng sử dụng PATH sẽ gọi tệp lô.

Hoặc là bạn bảo Cygwin không xử lý các tệp lô (dunno how) hoặc bạn sử dụng MSYS Bash nếu bạn muốn thay thế cmd.exe, nhưng đừng trộn Cygwin với Ruby gốc.

Tôi đã viết blog về pha trộn và kết hợp trong quá khứ:

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

+1

Ok ... đọc bài đăng trên blog của bạn ... làm cách nào tôi sử dụng phiên bản Cygwin Ruby kèm theo ... và điều gì sẽ là nhược điểm khi làm như vậy? Có thể/Tôi cũng phải cài đặt tất cả các công cụ khác dựa vào các phần mở rộng gốc trong môi trường Cygwin không? ImageMagick, nokogiri, v.v ...? Điều đó có chậm không? Hay tôi sẽ gặp phải các vấn đề khác? – crispy

+1

Vâng, nó sẽ chậm hơn và có, bạn sẽ cần phải cài đặt mọi thứ dưới Cygwin Ruby vì mã được biên dịch là khác nhau. –

+0

Một khuyến nghị là sử dụng MSYS, bởi vì nếu bạn chỉ cần bash, sau đó bạn không cần sự chậm chạp của Cygwin trong tất cả mọi thứ. –

59

Bạn có thể trộn và kết hợp Cygwin với MingW32 của Ruby nếu bạn đang cẩn thận và có lý do chính đáng để làm như vậy. Cygwin cung cấp môi trường CLI có nhiều thịt hơn so với MSYS nhưng Cygwin đã đóng gói Ruby chậm hơn nhiều so với phiên bản MingW32. Bí quyết là bí danh tất cả các trình bao bọc RubyGem trong Cygwin .bashrc của bạn. Đây là một đoạn trích từ tôi.

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

Đây là câu trả lời thực sự. Cám ơn rất nhiều! Tôi chỉ có môi trường của tôi làm việc độc đáo, vì vậy tôi sẽ có thể mương vỏ windows cmd.exe. –

+0

Tôi đồng ý vấn đề này khắc phục sự cố (đã lưu cho tôi một nhức đầu chỉ một phút trước) nhưng tôi nghĩ rằng Luis có câu trả lời thực sự. Đây chỉ là những điểm dừng cho đến khi vấn đề tiếp theo xảy ra. – Chris

+1

Vẫn dừng lại sau tất cả những năm này ... –

17

Bí quyết là bí danh tất cả các tệp .bat như Robert đã chỉ ra trong câu trả lời của anh ấy.

Thêm một bí danh mới để .bashrc hoặc .zshrc của bạn sau mỗi gem install là không vui vẻ mặc dù ...

Vì vậy tôi tạo ra những bí danh tự động bằng cách quét bindir 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

đây là cách để làm điều đó! cảm ơn cho kịch bản. –

+3

Cảm ơn! Nhưng tôi nghĩ chuỗi thứ hai phải là RUBY_BIN = $ (cygpath -u $ (ruby -e 'đặt RbConfig :: CONFIG ["bindir"]') | tr -d '\ r') – theotheo

+0

Trong hộp cửa sổ tôi sử dụng với babun/zsh, tìm thấy không thành công, vì vậy tôi đã xóa | tr-'\ r' mảnh và thay đổi đường dẫn tìm thành $ {RUBY_BIN:: -1} – Oswaldo

Các vấn đề liên quan