2011-12-19 5 views
10

Tôi có rất nhiều đá quý trên máy tính mà tôi muốn sử dụng trong công thức nấu ăn.Có thể gói/cài đặt đá quý từ bộ đệm cục bộ không?

Tôi biết người ta có thể đặt chúng trong một thư mục như/tmp/đá quý và chỉ:

cd /tmp/gems 
gem install *.gem 

Có thể đặt tất cả các đá quý trong một thư mục nơi tôi có thể cài đặt chúng với bundler mà không cần tải chúng lần nữa?

cd /somedir/my_rails_project 
bundle 

Tôi muốn tiết kiệm băng thông.

Trả lời

4

Bạn có thể thêm các thư mục địa phương để Gemfile của bạn (ví dụ từ các tài liệu):

gem "nokogiri", :path => "~/sw/gems/nokogiri" 

Ngoài ra, bạn có thể thiết lập một kho Git địa phương với những viên đá quý trong đó và viết một Gemfile như thế này:

gem "gem1", :git => "file:///tmp/gems", 
      :branch => "gem1" 
+0

Đó là một giải pháp, nhưng nó sẽ là tốt hơn nếu nó là trong suốt (Không có thay đổi trong Gemfile của tôi). – ayckoster

+0

Bạn có thể viết kịch bản để cài đặt đá quý (với cài đặt gem) từ bộ nhớ cache của bạn. – avy

+0

@ lượn sóng: Tôi đã làm chính xác điều đó. – ayckoster

24

bundle install --local phải là thứ bạn muốn. Từ bundle-install manpage:

 
--local 
    Do not attempt to connect to rubygems.org, instead using just the 
    gems located in vendor/cache. Note that if a more appropriate 
    platform-specific gem exists on rubygems.org, this will bypass 
    the normal lookup. 
+0

Và nếu triển khai (với capistrano hoặc tương tự), hãy sử dụng --deployment và đảm bảo rằng nhà cung cấp/gói liên kết tượng trưng được chia sẻ/vendor_bundle hoặc tương tự (như đã đề cập trong http://bundler.io/v1.5/deploying.html) –

2

Sử dụng

bundle package 

Locks và sau đó lưu trữ các viên ngọc vào ./vendor/cache.

Lệnh gói sẽ sao chép các tệp .gem cho đá quý của bạn trong gói vào ./vendor/cache. Sau đó, khi bạn chạy gói cài đặt, Trình quản lý sẽ sử dụng các đá quý trong bộ nhớ cache được ưu tiên cho các loại đá quý trên rubygems.org.

http://bundler.io/v1.6/bundle_package.html

0

Nếu bạn muốn sử dụng một bộ nhớ cache địa phương với mục đích đẩy nhanh tiến độ bundle install trên CI, ví dụ như khi một container Docker được sử dụng để chạy các bài kiểm tra, bạn có thể sử dụng --path. Điều này sẽ sử dụng đá quý trong đường dẫn nhất định, trừ khi họ không có mặt, nếu không nó sẽ tải chúng về vị trí đó.

Điều này giả định việc xây dựng CI có thể gắn kết một khối lượng liên tục bên trong vùng chứa docker. Vì vậy, ví dụ nếu máy CI có một thư mục /var/cache/drone có thể được gắn trong các thùng chứa Docker như ./cache sau đó bạn có thể làm:

bundle install --without=development --quiet --path=cache