2011-06-22 24 views
7

Tôi gói một số mã ruby ​​vào một viên ngọc. Tôi muốn tham khảo mã trong đá quý trong một số mã khác. Vì vậy, trong Gemfile tôi chỉ định tên, phiên bản và đường dẫn cục bộ của đá quý. Giống như:Làm thế nào để tham khảo một viên ngọc địa phương trong ruby?

gem 'gemname','0.x', :path => 'RELATIVE_PATH_TO_GEM_FILE' 

Sau bó cài đặt, tôi thấy

Using gemname (0.x) from source at RELATIVE_PATH_TO_GEM_FILE 

Nhưng khi tôi chạy mã, nó không thể tìm thấy mã trong viên ngọc. LOAD_PATH hiển thị ABSOLUTE_PATH_TO_GEM_FILE/lib.

Không có gì lạ khi không thể tìm thấy mã, chỉ có tệp gem trong ABSOLUTE_PATH_TO_GEM_FILE. nó không được giải nén. Vì vậy, không có thư mục lib.

nếu tôi đá quý cài đặt tệp đá quý đó vào hệ thống của mình, thì tất cả đều hoạt động tốt. Tôi có thể thấy tệp gem được giải nén thành các tệp mã nguồn. Nhưng câu hỏi của tôi là nếu nó có thể tham khảo các tập tin đá quý địa phương trực tiếp bằng cách nào đó?

+0

Thông thường, thuật ngữ "đá quý cục bộ" có nghĩa là thuật ngữ bạn đã biên soạn và cài đặt cục bộ, thay vì tải xuống từ trang web khác. Bạn đã xem xét biên dịch và cài đặt gem cục bộ, thay vì làm những gì bạn đang làm? –

+0

Thực ra, tệp .gem được tạo bởi chính tôi. Tôi chỉ đóng gói một số mã ruby ​​trong tệp .gem đó cố gắng làm cho chúng dễ dàng được chia sẻ với mã khác. Và có thư mục lib trong tệp .gem. Tôi đã nghĩ rằng nó sẽ giống như jar như java. Tôi cho rằng ruby ​​có thể xem tập tin gói đó thay vì giải nén chúng ra khỏi gói. Và gây nhầm lẫn, bundler thực sự tìm thấy nguồn trong gói. nhưng load_path dường như không hỗ trợ thư mục trong gói. – user810923

+0

Và bằng cách này, mặc dù bundler đã tìm thấy tệp .gem theo đường dẫn cụ thể của tôi, nó sẽ không lưu bộ nhớ cache .gem trong nhà cung cấp/bộ nhớ cache, trừ khi tệp .gem đã được cài đặt vào hệ thống gemset. – user810923

Trả lời

7

Không, bạn không thể trực tiếp tham khảo tệp .gem.

Trong thuật ngữ của bạn, bạn cần sử dụng đá quý "chưa giải nén".

:path => '/foo/bar/' 

nơi /foo/bar/ là một (đá quý) thư mục với lib/ vv

1

Chúng tôi đã làm một vị trí địa phương (không system-wide) đá quý. Chúng tôi đặt các biến môi trường này:

GEM_HOME=/path/to/rubygems-1.3.4 
RUBYLIB=/path/to/rubygems-1.3.4/lib/ 

Bằng cách đặt chúng, sau đó chúng tôi có thể đặt gem vào thư mục đó và ruby ​​biết tìm chúng ở đâu.

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