Làm cách nào để chỉ định tệp .gem cục bộ trong Gemfile của tôi?


Câu trả lời:


282

Đây không hoàn toàn là câu trả lời cho câu hỏi của bạn về việc cài đặt .gemcác gói, nhưng bạn có thể chỉ định tất cả các loại vị trí trên cơ sở đá quý bằng cách chỉnh sửa Gemfile của mình .

Chỉ định một :paththuộc tính sẽ cài đặt đá quý từ đường dẫn đó trên máy cục bộ của bạn.

gem "foreman", path: "/Users/pje/my_foreman_fork"

Thay phiên, chỉ định một :gitthuộc tính sẽ cài đặt đá quý từ kho lưu trữ git từ xa.

gem "foreman", git: "git://github.com/pje/foreman.git"

# ...or at a specific SHA-1 ref
gem "foreman", git: "git://github.com/pje/foreman.git", ref: "bf648a070c"

# ...or branch
gem "foreman", git: "git://github.com/pje/foreman.git", branch: "jruby"

# ...or tag
gem "foreman", git: "git://github.com/pje/foreman.git", tag: "v0.45.0"

(Như @JHurrah đã đề cập trong bình luận của anh ấy .)


Ngoài ra đối với một số tường lửa giao thức git có thể là một vấn đề. Trong trường hợp như vậy, hãy thửgem "foreman", :git => "https://github.com/pje/foreman.git"
kode

60

Có vẻ như trình đóng gói không thể sử dụng các tệp .gem trong hộp. Chỉ đường dẫn: đến thư mục chứa tệp .gem không hoạt động. Một số người đề nghị thiết lập một máy chủ đá quý cục bộ (geminabox, stickler) cho mục đích đó.

Tuy nhiên, điều tôi thấy đơn giản hơn nhiều là sử dụng "máy chủ" đá quý cục bộ từ hệ thống tệp: Chỉ cần đặt các tệp .gem của bạn vào một thư mục cục bộ, sau đó sử dụng "gem created_index" để biến nó thành kho lưu trữ Gem

mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index

Cuối cùng, điểm gói đến vị trí này bằng cách thêm dòng sau vào Gemfile của bạn

source "file://path/to/repo"

Nếu bạn cập nhật đá quý trong kho lưu trữ, hãy đảm bảo tạo lại chỉ mục.


6
Cảm ơn! Ngoài ra, tôi cần một dấu gạch chéo thứ ba để thực hiện "tệp: /// Tuyệt đối / Đường dẫn / đến / repo"
Anna

5
Sẽ không dễ dàng hơn khi chạy "máy chủ đá quý" trên dòng lệnh và thêm nguồn " localhost: 8808 " vào Gemfile của bạn
Anna

Martin thật tuyệt! Cảm ơn đã chia sẻ, chính xác là tôi đã tìm kiếm vì tôi không muốn phụ thuộc vào việc chạy mộtgem server và tôi cũng không muốn lưu trữ toàn bộ dự án, chỉ là tệp .gem.
Leo Gallucci

6
Tiền thưởng: Bạn có thể đạt được yêu cầu đường dẫn tuyệt đối bằng cách sử dụng File.Exand_path như thế nàysource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci

Không làm việc cho tôi. Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon

43

Tôi sẽ giải nén đá quý của bạn trong thư mục nhà cung cấp ứng dụng

gem unpack your.gem --target /path_to_app/vendor/gems/

Sau đó thêm đường dẫn trên Gemfile để liên kết đá quý đã giải nén.

gem 'your', '2.0.1', :path => 'vendor/gems/your'

29

Theo mặc định, Bundler sẽ kiểm tra hệ thống của bạn trước và nếu không tìm thấy đá quý, nó sẽ sử dụng các nguồn được chỉ định trong Gemfile của bạn.


Thật. nhưng điều gì sẽ xảy ra nếu tôi chưa cài đặt nó trước đây? (khi tôi triển khai đến một máy chủ) Không thể tìm thấy Imlib2-Ruby-0.5.2 trong bất kỳ lệnh nguồn nào đã kết thúc
ddayan

184
bạn có thể trỏ đến một thư mục cục bộ với gem "gemname" ,: path => "~ / some / local / path"
JHurrah

5
Tôi nghĩ rằng: đường dẫn yêu cầu thư mục gem với tập tin gempec. Tôi chỉ có tập tin .gem tôi muốn cài đặt.
ddayan

1
Ok đã triển khai giới hạn, nhưng đá quý chưa được cài đặt "Không có tệp nào để tải - vips": /
ddayan

4
Điều đó chắc chắn không đúng, ít nhất là nữa. Bundler không nhìn vào đá quý hệ thống của bạn và chỉ đi theo những gì trong Gemfile. Một trong những lý do nó rất khủng khiếp.
bioneuralnet

6

Bạn có thể buộc trình đóng gói sử dụng các viên đá quý bạn triển khai bằng cách sử dụng "gói gói" và "gói cài đặt - tiêu điểm"

Trên máy phát triển của bạn:

bundle install

(Cài đặt đá quý cần thiết và tạo Gemfile.lock)

bundle package

(Lưu trữ các viên ngọc trong nhà cung cấp / bộ đệm)

Trên máy chủ:

bundle install --local

(--local có nghĩa là "sử dụng đá quý từ nhà cung cấp / bộ đệm")


Nếu tôi không thể cài đặt bất cứ thứ gì trên máy chủ thì sao? Trong trường hợp này, tôi cần xây dựng bằng cào nhưng máy chủ không có đá quý tôi sử dụng để xây dựng; nhưng tôi không có vấn đề kiểm tra trong các phụ thuộc.
Henrik

"cài đặt gói" không hoạt động với tôi nếu đá quý không được bao gồm trong nguồn Gemfile hiện tại của tôi "
Anna

Chỉ cần xóa tệp đá quý tạm thời tạo tệp đá quý trước khi thực hiện bundle installSau đó, sao chép tệp gemfile vào nhà cung cấp / bộ đệm , thêm đá quý trở lại gemfile và thực thi bundle install --local
bert bruynooghe

1
bundle packagelà một gợi ý tuyệt vời, ngay cả bây giờ, ba năm sau. Nếu phiên bản Bundler của bạn cũ hơn 2.0 (chưa được phát hành tại văn bản này), bạn sẽ cần sử dụng bundle package --allnếu bạn muốn bao gồm đá quý vớipath hoặc gitphụ thuộc. Nó sẽ cung cấp cho bạn một lời nhắc hữu ích nếu nó phát hiện ra các phụ thuộc như vậy, mặc dù.
L2G

1
FYI: điều này có thể không hoạt động tốt như bạn hy vọng nếu bạn phát triển trên một nền tảng khác với việc bạn triển khai (ví dụ: phát triển trên macOS, triển khai lên Linux). Theo--local tài liệu: "Lưu ý rằng nếu một viên ngọc phù hợp với nền tảng cụ thể tồn tại trên rubygems.org thì nó sẽ không được tìm thấy."
Liam Dawson

1

Thêm .gemvào vendor/cachedường như để làm việc. Không có tùy chọn cần thiết trong Gemfile.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.