2010-02-14 52 views
6

Tôi đã xây dựng đá quý đầu tiên của tôi nhưng tôi dường như không thể làm cho nó cài đặt đúng. Tôi có thể dùng lệnhđá quý mà không thể tìm thấy đá quý mặc dù nó đang được cài đặt

sudo gem install ceilingfish-toto 

nào sản xuất sản lượng

Successfully installed ceilingfish-toto-0.3.6 
1 gem installed 

Nhưng khi tôi sau đó gõ gem which ceilingfish-toto. Tôi nhận được đầu ra

Can't find ruby library file or shared library ceilingfish-toto 

Đó là rất lạ bởi vì nếu tôi đi và tìm kiếm trong đá quý của tôi folder tôi có thể xem tất cả các tập tin đã cài đặt có

# ls -l /opt/local/lib/ruby/gems/1.8/gems/ceilingfish-toto-0.3.6/ 
total 48 
-rw-r--r-- 1 root admin 1053 14 Feb 17:16 LICENSE 
-rw-r--r-- 1 root admin 6166 14 Feb 17:16 README.md 
-rw-r--r-- 1 root admin 879 14 Feb 17:16 Rakefile 
-rw-r--r-- 1 root admin  6 14 Feb 17:16 VERSION 
-rw-r--r-- 1 root admin 2477 14 Feb 17:16 ceilingfish-toto.gemspec 
drwxr-xr-x 7 root admin 238 14 Feb 17:16 test 

Có ai biết những gì có thể gây ra điều này? Tôi nghĩ rằng nó phàn nàn vì có một dấu gạch ngang trong tên đá quý. Bạn có thể xem gemspec tại đây http://github.com/ceilingfish/toto

+0

Vâng, thực sự không có tập tin hoặc thư viện được chia sẻ của cá trần. – badp

Trả lời

6

gem which ceilingfish-toto xem qua đường dẫn yêu cầu đá quý cho tệp có tên là barefish-toto.rb. Vì không có, nó không trả về gì cả. Điều gì phù hợp với bạn là gem which toto, nhưng kể từ khi lib/ không được bao gồm trong thông số kỹ thuật đá quý của bạn, các tệp lib không được cài đặt, vì vậy nó không tồn tại.

Chạy lại rake gemspec có thể khắc phục được sự cố. Ngoài ra, bạn có thể kiểm tra xem đá quý có được cài đặt bằng tên của nó không bằng cách sử dụng gem list ceilingfish-toto để hiển thị cho bạn nó được cài đặt, bất kể tệp có (nó cũng sẽ liệt kê các phiên bản đã cài đặt).

+0

Đối với 'gem list', sử dụng _-d_ cho "details": 'gem list -d ceilingfish-toto' để xem nó được cài đặt ở đâu. –

-1

OK, do đó, vấn đề ở đây dường như là có sự cố với tệp gemspec của tôi. Từ những gì tôi có thể nói có hoàn toàn phải là một tập tin với tên lib/gem-name.rb vì vậy trong trường hợp này tôi cần lib/ceilingfish-toto.rb.

Điều này dường như không đúng đối với một số đá quý khác hoạt động chính xác. Ví dụ: mime-types hoặc rest-client, mặc dù chúng không hiển thị với gem which, chúng thực sự hoạt động.

Tôi không chắc chắn điều này là hoàn toàn chính xác chưa, tôi chắc chắn có một cách để có được một đá quý với dấu gạch ngang trong tên để hoạt động chính xác. Nếu tôi biết tôi sẽ đăng lại và cho bạn biết.

7

Đó không phải là dấu nối.

gem which tìm kiếm các tệp thư viện trong đá quý, không phải là đá quý. So sánh:

$ gem which haml 
/home/dave/.gem/ruby/1.8/gems/haml-3.0.12/lib/haml.rb 
$ ls haml-3.0.12/lib/h* 
haml haml.rb haml.rbc 

Đào. Lưu ý sự tồn tại của lib/haml.rb.

$ gem which rails 
ERROR: Can't find ruby library file or shared library rails 
$ ls rails-2.3.8/lib/r* 
rails_generator.rb railties_path.rb rubyprof_ext.rb ruby_version_check.rb 

Không có lib/rails.rb. Nhưng thử:

$ gem which railties_path # not a gem 
/home/dave/.gem/ruby/1.8/gems/rails-2.3.8/lib/railties_path.rb 

Vì vậy gem which ceilingfish-toto ném một lỗi ngay cả khi ceilingfish-toto được cài đặt vì không có lib/ceilingfish-toto.rb tập tin (thậm chí không có một thư mục lib).

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