2015-01-06 13 views
8

Tôi đang cố gắng xây dựng một viên ngọc Ruby bằng cách sử dụng các hướng dẫn tại http://guides.rubygems.org/make-your-own-gem/. Sau đây dường như làm việc tốt và một tập tin * .gem được tạo ra.Tạo một Gem Ruby - Không thể tải tập tin như vậy

gem build mygem.gemspec 

Sau đây cũng xuất hiện để thành công (chỉ khi mở đầu với sudo):

sudo gem install mygem-0.0.1.gem 

Tuy nhiên, khi tôi cố gắng để require 'mygem' bên IRB, tôi nhận được lỗi sau:

LoadError: cannot load such file -- mygem 

Tôi đã nhìn thấy các lỗi tương tự xung quanh Stackoverflow nhưng không thể tìm ra điều gì đang xảy ra trong trường hợp cụ thể của tôi. Tôi có thể yêu cầu những viên đá quý khác (không phải của tôi) mà không có vấn đề gì. Đá quý của tôi không hiển thị ở đầu ra của gem list nhưng nó sẽ không tải với yêu cầu.

FWIW Tôi đang sử dụng rbenv, là thương hiệu mới đối với tôi.

Dưới đây là sản phẩm của gem env:

  • rubygems VERSION: 2.4.5

    • RUBY VERSION: 2.1.5 (2014/11/13 patchlevel 273) [x86_64-darwin14 .0]

    • LẮP ĐẶT MỤC: /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0

    • RUBY thực thi: /Users/speersj/.rbenv/versions/2.1.5/bin/ruby

    • thực thi MỤC: /Users/speersj/.rbenv/versions/2.1.5/bin

    • SPEC CACHE DIRECTORY: /Users/speersj/.gem/specs

    • System Configuration MỤC: /Users/speersj/.rbenv/versions/2.1.5/etc

    • rubygems nền tảng:

    • ruby ​​

    • x86_64-darwin-14

    • PATHS GEM:

      • /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1. 0

      • /Users/speersj/.gem/ruby/2.1.0

    • GEM CẤU HÌNH:

      • : update_sources => true

      • : verbose => true

      • : vết lùi => sai

      • : bulk_threshold => 1000

    • NGUỒN REMOTE:

    • SHELL PATH:

      • /Users/speersj/.rbenv/versions/2.1.5/bin

      • /Users/speersj/.rbenv/libexec

      • /Users/speersj/.rbenv/plugins/ruby-build/bin

      • /Users/speersj/.rbenv/shims

      • /Users/speersj/.rbenv/bin

      • /Library/Frameworks/Python.framework/Versions/3.4/bin

      • /usr/local/bin

      • /usr/local/sbin

      • /usr/local/Heroku/bin

      • /usr/local/bin

      • /usr/bin

      • /bin

      • /usr/sbin

      • /sbin

      • /usr/local/bin

      • /usr/local/smlnj/bin

Gemspec:

Gem::Specification.new do |spec| 
    spec.name  = 'mygem' 
    spec.version  = '0.0.1' 
    spec.date  = '2015-01-05' 
    spec.summary  = "mygem" 
    spec.description = "Attempting to build a gem" 
    spec.authors  = ["speersj"] 
    spec.email  = # my email here 
    spec.files  = ['lib/command.rb', 'lib/connection.rb'] 
    spec.homepage = '' 
    spec.license  = 'MIT' 
end 
+0

Nội dung của thư mục 'lib' của bạn là gì?Đá quý của bạn có một tệp có tên 'mygem' không? – matt

+0

lib chứa một vài tệp định nghĩa các lớp và cũng bao gồm tệp mygem.rb yêu cầu phần còn lại của các tệp trong lib. – speersj

+0

Hãy thử cài đặt đá quý không có 'sudo'? –

Trả lời

13

Số spec.files mục gemspec của bạn không bao gồm tệp mygem.rb, do đó tệp sẽ không có trong đá quý khi được xây dựng. Chỉ các tệp được liệt kê trong mục này sẽ được bao gồm trong đá quý cuối cùng.

Giải pháp đơn giản nhất là nên chỉ thêm mygem.rb để mảng:

spec.files = ['lib/command.rb', 'lib/connection.rb', 'lib/mygem.rb'] 

Đây là một sửa chữa khá đơn giản, bạn có thể muốn làm điều gì đó linh hoạt hơn như sử dụng một Dir glob:

spec.files = Dir['lib/**/*.rb'] 

Thực tế là Rubygems guide suggests you do something like this (văn bản là từ cuối phần đó):

If you’ve added more files to your gem, make sure to remember to add them to your gemspec’s files array before publishing a new gem! For this reason (among others), many developers automate this with Hoe , Jeweler , Rake , Bundler , or just a dynamic gemspec .


Ngoài ra, bạn thực sự cần phải sửa chữa permissions problem, bạn không cần sudo để cài đặt đá quý vào thư mục chính của riêng bạn.

+0

Cảm ơn, tôi đã hoàn toàn bỏ lỡ việc thêm tệp rõ ràng nhất! Dir glob từ bây giờ. Đánh giá cao bạn giúp điểm tôi đi đúng hướng lại: quyền truy cập, phải sử dụng sudo dường như không đúng với tôi. – speersj

2

Bạn không thể sử dụng sudo để cài đặt đá quý khi sử dụng rbenv (hoặc RVM), ngoại trừ cài đặt loại "đa người dùng" hoặc "toàn hệ thống" chuyên biệt và rất hiếm khi bình thường/thường xuyên người dùng nên sử dụng.

sudo chuyển đặc quyền của bạn tới thư mục gốc và root không có kiến ​​thức về hồng ngọc trong môi trường rbenv của người dùng. Kết quả là, root sẽ sử dụng hệ thống mặc định Ruby, mà sẽ cài đặt các tập tin ở đó.

Thay vào đó, hãy sử dụng số gem install cơ bản, sẽ thực hiện điều đúng.

0

Đảm bảo bạn đã thêm tất cả các tệp đã sửa đổi vào repo github trước khi tạo đá quý của bạn Và sau đó cài đặt gem xây dựng.

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