2010-06-07 31 views
8

Làm cách nào để thêm các phụ thuộc tùy chọn vào rubygems, vì nó không hỗ trợ nó?Rubygems phụ thuộc tùy chọn

Sử dụng trường hợp:

  • Tôi có một thư viện mà không phụ thuộc vào một trong hai bản chuyển ngược, Extlib, khía cạnh hoặc ActiveSupport. Trước đây tôi không thêm bất kỳ phụ thuộc nào, vì mọi người có thể chọn (đọc: nó sẽ chơi độc đáo với bất kỳ thứ gì họ đang sử dụng), nhưng mọi người phàn nàn rất nhiều về thư viện không hoạt động, hoặc họ sẽ tin nó phụ thuộc vào ActiveSupport (mà trong một số trường hợp là không đi cho một số người). Vì vậy, tại thời điểm này nó phụ thuộc vào Backports, vì nó là tối thiểu nhất. Mặc dù điều đó có nghĩa là mọi người sẽ cài đặt Backports nếu họ cài đặt thư viện của tôi, mặc dù họ có thể không sử dụng nó tại thời gian chạy.
  • Tôi muốn phụ thuộc vào các loại đá quý khác nhau tùy thuộc vào môi trường (ví dụ: Johnson trên MRI/Rubinius, TheRubyRhino trên JRuby, Lyndon trên MacRuby).

Một cách tiếp cận tôi mặc dù là highjacking extconf.rb. Tôi có thể kiểm tra hệ thống ở đó. Tuy nhiên, điều này cảm thấy sai. Hơn nữa, nếu đây là cách duy nhất, làm thế nào để tôi đi về nó? Làm thế nào để kích hoạt cài đặt thêm đá quý từ đó? system 'gem install ...'?

Trả lời

4

Bạn đã thử đưa ra các thông báo lỗi thông tin cho các phụ thuộc chưa được đáp ứng để làm rõ các quan niệm sai lầm đó chưa? Với zombie-chaser, tôi không làm cho gosu phụ thuộc, nhưng nếu mọi người cố gắng sử dụng phiên bản đồ họa của nó mà không có gosu, tôi thông báo với họ rằng họ cần phải cài đặt gosu.

+2

Tôi đã làm điều đó, nhưng một số người không quan tâm và hét "lỗi". Ngoài ra, tôi muốn nó hoạt động. Mặc dù đây có lẽ là cách để đi (vì rubygems không thể xử lý tình huống này). –

+0

Tôi tự hỏi nếu rubygems chấp nhận yêu cầu tính năng, hoặc cho dù đó là "bản vá chào mừng" ... –

+0

Tôi nghĩ rằng điều này khá khó thực hiện, ví dụ như khả năng tương thích phá vỡ không phải là một tùy chọn và dữ liệu meta có thể không chứa mã thực thi. –

2

Tôi biết một vài viên ngọc mà lấy "cướp extconf.rb" cách tiếp cận:

  • perftools.rb có một sự phụ thuộc nếu nó trên 1.9, nhưng không đòi hỏi rằng sự phụ thuộc vào 1.8.
  • ruby-debug-ide phụ thuộc vào ruby-debug-base trên 1,8, ruby-debug-base19 trên 1,9.

Cả hai sử dụng Gem::DependencyInstaller#install để thực hiện cài đặt, có lẽ thích hợp hơn là system 'gem install ...'.

Xem thêm yêu cầu tính năng rubygems này: specify dependencies per ruby version.

+1

cảm ơn, tôi thực sự đã viết một công cụ nhỏ trong khi quay trở lại để làm chính xác điều này: https://github.com/rkh/gem_tools –

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