2012-06-21 30 views
10

Kể từ lần thứ hai thực hiện bundle install, phụ thuộc được tải từ Gemfile.lock miễn là Gemfile không bị thay đổi.Điều gì sẽ xảy ra khi sửa đổi Gemfile.lock trực tiếp?

Nhưng tôi tự hỏi cách phát hiện thay đổi được thực hiện giữa hai tệp đó. Ví dụ, nếu tôi đang thêm một phụ thuộc mới trực tiếp vào Gemfile.lock mà không cần thêm nó vào Gemfile (trái ngược với cách thực hành tốt nhất kể từ khi Gemfile.lock được tạo tự động từ Gemfile), thì hãy xem xét Gemfile như là một Gemfile như là đã thay đổi?

Thật vậy, quy trình bundle install có so sánh toàn bộ cây Gemfile và Gemfile.lock để phát hiện thay đổi không?

Nếu có, ngay cả khi tôi thêm phụ thuộc trực tiếp vào Gemfile.lock, Gemfile sẽ được phát hiện là đã thay đổi (kể từ khác) và sẽ xóa lại Gemfile.lock (do đó mất phụ thuộc bổ sung ...)

Quá trình bundle install kể từ khi khởi chạy lần thứ hai là gì?

Để rõ ràng hơn, câu hỏi của tôi là:

Thay đổi chỉ dựa trên Gemfile? Điều đó có nghĩa là bundler sẽ giữ một ảnh chụp nhanh Gemfile của mỗi số thực thi bundle install N và chỉ so sánh nó với thực thi bundle install N + 1?

Hoặc không có ảnh chụp nhanh được tạo trong bộ nhớ bundler và bundler thực hiện so sánh với Gemfile.lock mỗi lần để phát hiện xem Gemfile có được coi là thay đổi hay không.

+0

chỉ cần xóa tệp Gemlock, đặt đá quý cần thiết của bạn vào tệp gem và chạy 'bundle install'. Đó là nó. Tôi không nghĩ là ý tưởng tốt để suy nghĩ nhiều về tập tin gemlock. ;) – uday

+0

@uDaY Tôi đồng ý với bạn nhưng tôi tò mò về quy trình này trong phần cài đặt gói :) – Mik378

+3

Bạn đã đọc [this] (http://gembundler.com/rationale.html) và [this] (http://gembundler.com/man/bundle-install.1.html)? –

Trả lời

15

Nếu bạn chỉnh sửa Gemfile.lock thì ứng dụng Rails sẽ phụ thuộc vào một phiên bản khác của đá quý ... Tính toàn vẹn của hệ thống phiên bản đá quý của bạn sẽ bị hỏng trong trường hợp này. Đó là một ý tưởng rất tồi tệ khi chỉnh sửa tệp Gemfile.lock trực tiếp.

Xin vui lòng, là một chàng trai tốt và thực hiện thoả thuận với Gemfile chỉ

1

Tôi biết câu hỏi này là rất cũ, nhưng gần đây tôi đã phải đối phó với điều này vì vậy tôi đang đưa ra câu trả lời của riêng tôi. Omniauth gần đây đã được cập nhật lên phiên bản 1.3.2 để vá một vấn đề bảo mật. Tôi đã được giao nhiệm vụ cập nhật Omniauth cho phiên bản vá mới này, tuy nhiên khi kiểm tra Gemfile của chúng tôi, tôi nhận ra rằng chúng tôi không có Gem đó ở đó. Vì vậy, tôi nói tốt có lẽ tôi chỉ có thể chuyển đổi phiên bản trên Gemfile.lock từ 1.3.1 đến 1.3.2. Câu chuyện dài ngắn, điều đó sẽ có tác dụng, nhưng hóa ra tôi không phải làm theo cách đó. Những gì tôi đã kết thúc làm được ban hành lệnh sau

bundle update omniauth --patch

nào dẫn đến sự thay đổi tương tự tôi đã đi làm bằng tay:

- omniauth (1.3.1) 
+ omniauth (1.3.2) 

Điều đó nói rằng, nếu bạn nghĩ rằng bạn cần phải thực hiện những thay đổi Gemfile.lock có lẽ là một cách để thực hiện thay đổi đó mà không cần chạm vào Gemfile.lock. Chỉ cần làm bundle --help và bạn có thể sẽ tìm và tùy chọn để làm những gì bạn đang cố gắng đạt được.

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