2008-12-02 26 views
16

Theo mặc định, khi bạn sudo gem install thegemname nó sẽ cài đặt các tệp thi hành vào /usr/bin/Có thể "cài đặt đá quý" được định cấu hình để cài đặt các tệp thi hành bên ngoài/usr/bin/theo mặc định không?

Có cách nào để thay đổi điều này không? Ví dụ, để cài đặt chúng vào /usr/local/rubygems/bin (hoặc bất kỳ đường dẫn nào khác)?

Con đường dường như không được mã hóa cứng vào file gemspec, vì vậy tôi không thấy lý do tại sao điều này không nên có thể (mặc dù tôi có rất ít kinh nghiệm với Ruby/Gems)

Trả lời

14

Xem http://www.rubygems.org/read/chapter/11 và chỉ định một ~/.gemrc xác định biến gemhome.

Ví dụ:

gemhome: /usr/local/rubygems 

Bạn cũng có thể đặt tập tin này trong /etc/gemrc

Hoặc bạn có thể thiết lập các GEM_HOME env-variable:

$ export GEM_HOME=/tmp/gemtest 
$ gem install bundler 
$ ls /tmp/gemtest/bin/ 
bundle 
+2

Cảm ơn! Tôi hy vọng bạn không nhớ tôi đã cập nhật câu trả lời của bạn. Tôi prodded xung quanh rubygems.rb - thư mục bin được gắn vào gemhome, có vẻ như không có cách nào rõ ràng để ghi đè lên chỉ này, nhưng thiết lập gemhome để /Library/Ruby/Gems/1.8/ (trên OS X) cho một đường dẫn bin /Library/Ruby/Gems/1.8/bin hoàn hảo – dbr

+0

Cập nhật tốt, cảm ơn! – csl

+1

Gah, không hoàn toàn hoàn hảo. Có ghi đè/usr/bin mặc định cho phân phối Mac .. – dbr

2

Trên OS X, thư mục thực thi được ghi đè để /usr/bin trong tệp /Library/Ruby/Site/1.8/rubygems/defaults.rb

# The default directory for binaries 
def self.default_bindir 
    if defined? RUBY_FRAMEWORK_VERSION then # mac framework support 
    '/usr/bin' 
    else # generic install 
    ConfigMap[:bindir] 
    end 
end 

Là công việc hackish xung quanh, tôi đã thay đổi /usr/bin thành vị trí bin mong muốn của tôi, hoạt động chính xác. Dường như không có cách nào để ghi đè lên bindir từ cấu hình ~/.gemrc?

+1

Điều này thực sự gây phiền toái. Không có cách nào để thay đổi điều này bởi vì nó phụ thuộc vào hằng số toàn cầu. Và nếu bạn thay đổi nó mỗi lần rubygems được cập nhật, bạn phải thay đổi nó một lần nữa. Tôi muốn bắn anh chàng chịu trách nhiệm về quyết định kinh khủng này. – mxcl

+1

Tôi đã gửi báo cáo lỗi về vấn đề này: http://rubyforge.org/tracker/index.php?func=detail&aid=27641&group_id=126&atid=575 – mxcl

+1

Thực ra, chúng tôi đã sai. Bạn có thể thay đổi bindir. Tôi đã ghi lại ở đây: http: //wiki.github.com/mxcl/homebrew/cpan-ruby-gems-và-python-disttools – mxcl

18

tôi thêm này như một câu trả lời để nó là rõ ràng khi tôi chạy vào vấn đề này một lần nữa :)

Thứ nhất, di chuyển tất cả các thùng trong /var/lib/gems/1.8/bin/-/usr/bin/. Nếu bạn không làm điều này, sau đó gỡ bỏ cài đặt hoặc cập nhật một viên ngọc sẽ không loại bỏ các nhị phân từ thư mục bin gốc.

Bạn cũng có thể muốn loại bỏ con đường cũ từ $PATH

Tiếp theo, chỉnh sửa ~/.gemrc và thêm (hoặc cập nhật) dòng sau:

gem: --bindir /usr/bin 

này ghi đè đá quý để nó luôn luôn sử dụng/usr/bin/như bin dir.

Không cần phải cập nhật đường dẫn (đặc biệt là lộn xộn cho máy nhiều người dùng).

+0

Vâng, điều này dường như làm việc hoàn hảo (ít nhất là trên Rubygem 1.3.6) – dbr

+0

Làm thế nào để bạn làm: * Bạn cũng có thể muốn loại bỏ đường dẫn cũ từ $ PATH * –

+0

@JohnRPerry Có một số kỹ thuật tốt để [xóa thư mục khỏi $ PATH] (https://stackoverflow.com/q/11650840/41688) – BryanH

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