2013-06-04 29 views
14

TL; DR:Thiếu File trong Gem sau Xây dựng

Đừng chạy bó trong một kho git hiện có. Những điều kỳ lạ sẽ xảy ra mà không có bất kỳ thông báo lỗi nào.

Câu hỏi gốc:

tôi đã xây dựng một viên ngọc bằng cách áp dụng các bước trong hướng dẫn này:

http://net.tutsplus.com/tutorials/ruby/gem-creation-with-bundler/

Là một bước cuối cùng, tôi đã chạy ngọc xây dựng .gemspec

Điều này thành công, nhưng khi tôi cài đặt đá quý, tôi tìm thấy tệp quan trọng, tệp chứa mã của tôi, không có trong đá quý. Một tệp khác trong cùng thư mục (lib), "version.rb", không tồn tại trong đá quý.

Tôi không biết làm thế nào để bắt đầu gỡ lỗi này ... làm thế nào để xây dựng bundler/gem quyết định những tập tin để bao gồm trong đá quý?

Edit:

công việc của tôi là:

gem build <project_name>.gemspec 
gem unpack <project_name> 
=> confirm file does not exist in <unpacked>/lib/ 

gem install <project name> 
=> confirm file structure in ~/home/stefan/.rvm/... contains gem, but does not contain desired file 

Chỉnh sửa 2/Nghị quyết:

tôi là cuối cùng có thể làm việc này bằng cách cam kết tất cả các mã của tôi đến một từ xa kho lưu trữ, tạo ra một bản sao sạch, và xây dựng đá quý. Đá quý mới bao gồm tất cả các tệp được yêu cầu.

Một chút lịch sử ... Ban đầu tôi đã tạo mã và cam kết trước khi suy nghĩ về việc tạo một viên ngọc (đây là đá quý đầu tiên của tôi). Sau đó, tôi đã sử dụng gói bên trong kho lưu trữ gốc, vốn không có khiếu nại, nhưng có lẽ là lý do cho sự kỳ quặc.

+1

Tôi đã xác nhận với một viên ngọc trên hệ thống của tôi sử dụng 'gem build project_name.gemspec; gem unpack project_name-x.y.z.gem' nên bao gồm và giải nén tập tin được thêm gần đây, và không cần thêm công việc hoặc kiểm tra nào. Tôi không thể nói từ mô tả luồng công việc của bạn những gì có thể gây ra sự khác biệt từ hành vi mong đợi. –

+0

Điều này có thể tiết kiệm cho tôi 10 giờ bashing đầu của tôi chống lại một bức tường gạch. Tôi yêu Stack Overflow. – reedstonefood

Trả lời

22

Một trong những thứ mà bạn đã làm là bắt đầu một repo git cục bộ để quản lý phiên bản mã đá quý của bạn. Kiểm tra xem bạn đã thêm tệp vào git

git add lib/gem_name/missing_file.rb 

Bundler tạo đá quý sử dụng git bên trong để theo dõi "thành viên" của tệp nguồn cho đá quý. Bạn có thể thấy điều này trong .gemspec mà nó sử dụng backticks để gọi ra để git và tạo ra một danh sách tập tin:

gem.files   = `git ls-files`.split($/) 

Chú giải này cũng có nghĩa là bạn nên chú ý đến những gì bạn liệt kê trong .gitignore

+0

Tệp bị thiếu trong git. Tuy nhiên bây giờ tôi đã thêm nó và xây dựng lại đá quý. Cùng một kết quả. Tôi cũng đã thực hiện một tệp git ls-files, nó hiển thị tệp và tất cả các tệp thử nghiệm của tôi. Không ai trong số này được bao gồm trong đá quý. – Stefan

+1

Bạn đang sử dụng các tác vụ cào để cài đặt đá quý? 'rake install' thực hiện' gem build' và 'gem install' bằng các vị trí được quản lý. 'gem build name.gemspec' không thực hiện cài đặt, nó chỉ tạo' name-x.y.z.gem' trong thư mục hiện tại –

+0

Câu hỏi được cập nhật với quy trình làm việc. Tôi đã không bao giờ được sử dụng cài đặt cào, nhưng tôi chắc chắn rằng tập tin không tồn tại trong đá quý ban đầu trước khi cài đặt – Stefan

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