2011-09-19 6 views

Trả lời

9

Bạn có thể đặt một intervall đá quý phép

gem 'rack', '<1.3.3', '>1.2.4' 

Nó sẽ được tải một thực tế hầu hết các bên trong intervall chọn.

Nhưng tôi không nghĩ bạn có thể yêu cầu các phiên bản đá quý khác nhau. Nếu một viên ngọc sẽ được nạp trong các phiên bản khác nhau, mỗi lớp và mô-đun phải có không gian tên riêng để tránh ghi đè lên các phương thức của đá quý.

+0

Có rất nhiều các trường hợp phiên bản nơi mới Gems thực hiện một công cụ refactor hoàn chỉnh và thay đổi namespace/tên module của chúng. Dòng Mongo 1.x đi từ không gian tên 'MongoClient' đến' Mongo :: Client' và sẽ là một trường hợp sử dụng hoàn hảo để hỗ trợ nhiều phiên bản của cùng một gem. –

+0

@knut Ý của bạn là gì nhất? – Kamesh

+0

@Kamesh Đá quý có số phiên bản cao nhất. – knut

12

Không, bạn không thể tải nhiều phiên bản đá quý cùng một lúc. Điều này là bởi vì, như knut nhấn mạnh, mã sẽ xung đột. Làm thế nào một viên ngọc biết sử dụng phiên bản 1.2.4 của Rack như trái ngược với phiên bản 1.3.3 của Rack? Nó không thể.

Ngoài ra: với Bundler, tất cả phụ thuộc đá quý phải được thỏa mãn để quá trình đóng gói hoàn tất. Nếu bạn có một viên đá quý, hãy yêu cầu yêu cầu Giá 1.2.4 (nghĩa là = 1.2.4 ở trong số gemspec cho viên ngọc đó) và một đá quý khác yêu cầu phiên bản Giá như >= 1.3 thì các phiên bản đá quý sẽ xung đột và Bundler sẽ cho bạn biết .

+0

Câu trả lời hay! Câu cuối cùng có bị cắt ngắn không? ("sau đó các phiên bản đá quý ...") Bất kỳ cơ hội nào để thêm phần còn lại? Tôi muốn đọc đến cuối :-) – tjmw

+0

@tjmw: Nó không phải là thú vị ... nó chỉ là "sẽ xung đột và Bundler sẽ cho bạn biết như vậy." –

2

Tôi đã đưa ra câu hỏi này bởi vì tôi muốn bôi đen một số phiên bản đá quý ngược dòng bị hỏng đã bị lỗi. Trong khi bạn không thể làm

gem 'rack', '1.3.3', '1.2.4'

bạn thể có nhiều != hạn chế để loại trừ các phiên bản mà bạn biết là có vấn đề:

gem 'rack', '!= 1.3.0.beta2', '!= 1.3.0.beta'