2012-05-31 29 views

Trả lời

13

Trên máy tính của tôi, con đường tải ban đầu trông như thế này:

$ ruby -e 'puts $LOAD_PATH' 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0 

vũ trang với grep, một cuộc điều tra vào nguồn của Ruby dẫn đến definition of ruby_initial_load_paths[] in version.c (đây là trên Ruby 1.9.3). Đầu tiên trong số này áp dụng (không phải NO_INITIAL_LOAD_PATH hoặc RUBY_SEARCH_PATH đã được đặt) là RUBY_SITE_LIB2. Nhìn vào định nghĩa ở trên định nghĩa rằng we see:

#define RUBY_SITE_LIB2    RUBY_SITE_LIB "/"RUBY_LIB_VERSION 

in turn:

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby" 

Tiếp theo chuỗi này định nghĩa, nó trở nên rõ ràng rằng điều này tương ứng với sự xâm nhập đầu tiên trong con đường tải của tôi ở trên. Tương tự, các hằng số khác đi vào biến này tương ứng với các mục nhập đường dẫn tải khác.

Biến số ruby_initial_load_paths[] được sử dụng trong ruby_init_loadpath_safe() in ruby.c, nơi đường dẫn tải thực tế được thiết lập cho quy trình.

Vì vậy, câu trả lời cho câu hỏi của bạn là đường dẫn tải ban đầu được đặt tại thời gian biên dịch với một số #define giây, theo cách xây dựng đã được định cấu hình.

0

biên soạn của bạn tạo ra một thư mục lib trên hệ thống * nix dựa nó thường là

/usr/lib/ruby/X.Y.Z 

X.Y.Z đại diện cho số phiên bản của ruby ​​phiên bản C api của bạn.

+0

Không, số phiên bản có đại diện cho phiên bản API C của Ruby –

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