Khi chạy rake
tôi gặp lỗi này:
Bạn đã kích hoạt rake 0.9.2, nhưng Gemfile của bạn yêu cầu rake 0.8.7. Xem xét sử dụng bó thực thi.
Sử dụng bundle exec rake
thay vì chỉ rake
có vẻ hiệu quả, nhưng nó là cách tốt nhất để khắc phục điều này?
Khi chạy rake
tôi gặp lỗi này:
Bạn đã kích hoạt rake 0.9.2, nhưng Gemfile của bạn yêu cầu rake 0.8.7. Xem xét sử dụng bó thực thi.
Sử dụng bundle exec rake
thay vì chỉ rake
có vẻ hiệu quả, nhưng nó là cách tốt nhất để khắc phục điều này?
Câu trả lời:
Sử dụng bundle exec
là cách đúng đắn để làm điều này.
Về cơ bản những gì đang xảy ra là bạn đã cập nhật rake thành 0.9.2, hiện đang mâu thuẫn với phiên bản được chỉ định trong Gemfile của bạn. Trước đây, phiên bản mới nhất của rake
bạn đã khớp với phiên bản trong Gemfile của bạn, vì vậy bạn không nhận được bất kỳ cảnh báo nào khi chỉ cần sử dụng rake
.
Yehuda Katz (một trong những nhà phát triển Bundler gốc) giải thích tất cả trong bài đăng trên blog này .
Để tránh gõ bundle exec ...
mọi lúc, bạn có thể thiết lập bí danh hoặc hàm trong trình bao của mình cho các lệnh bạn thường sử dụng với Bundler. Ví dụ: đây là những gì tôi sử dụng cho Rake:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
Nếu bạn có lý do để giữ phiên bản hiện tại của cào (hoặc bất kỳ loại đá quý nào khác gây ra sự cố), matt là chính xác, cách tốt nhất để làm điều này là chạy bundle exec
. Điều này sử dụng phiên bản được chỉ định trong Gemfile của bạn thay vì sử dụng phiên bản mới nhất của đá quý bạn đã cài đặt. (nathan.f77 có một giải pháp tốt dưới đây nếu bạn không muốn gõ bundle exec
mỗi khi bạn chạy cào)
Mặt khác, nếu không có lý do gì để không cập nhật rake, bạn có thể chạy
bundle update rake
Điều này thực sự sẽ cập nhật Gemfile.lock của bạn để sử dụng phiên bản cào mới nhất thay vì phải chạy bundle exec
mỗi lần.
Lưu ý: nếu bạn chỉ chạy, bundle update
điều này sẽ cập nhật tất cả các viên ngọc trong Gemfile của bạn thay vì chỉ cào, đó có thể không phải là thứ bạn muốn, bởi vì nếu có thứ gì đó bị hỏng trong ứng dụng của bạn, bạn sẽ không biết bản cập nhật đá quý nào gây ra.
Cách ít được đề xuất hơn để giữ phiên bản cũ hơn mà không phải sử dụng bundle exec
là gỡ cài đặt các phiên bản mới hơn của cào.
$ gem gỡ cào Chọn đá quý để gỡ cài đặt: 1. cào-0.8.7 2. cào-0.9.2 3. Tất cả các phiên bản > 2 Đã gỡ cài đặt thành công rake-0.9.2
Điều này hoạt động, nhưng nếu bạn đang làm việc với nhiều ứng dụng sử dụng các phiên bản cào khác nhau, điều này có thể gây khó khăn vì bạn sẽ thấy mình liên tục phải cài đặt và gỡ cài đặt các phiên bản khác nhau.
gem install rake
. Sau đó gem uninstall rake
và chọn 0.9.2.
bundle update
cũng sẽ cập nhật bất kỳ đá quý nào mà không có phiên bản được chỉ định cho phiên bản mới nhất hiện có. Đó có thể không phải là những gì bạn muốn. bundle update rake
sẽ được nhiều ưu tiên hơn.
public_suffix
thay vì rake
. Chạy bundle update public_suffix
không có tác dụng, thật không may.
Thử bundle clean --force
Nó loại bỏ mọi đá quý hệ thống không có trong gói này
Lần trước điều này xảy ra với tôi, tôi đã cập nhật tất cả đá quý của mình. Tôi đã làm một gem uninstall rake
và nó liệt kê các tùy chọn phiên bản. Tôi đã chọn cái mới hơn và sau đó tôi không phải sử dụng bundle exec
nữa.
Về cơ bản, nếu bạn sử dụng bundle exec
nó sẽ sử dụng bất kỳ phiên bản đá quý nào được cài đặt bởi gói của bạn, vậy thì có gì trong Gemfile. Không có bundle exec
nó sử dụng bất cứ phiên bản nào là hệ thống mặc định của bạn.
bundle exec
là chính xác, nhưng bạn không muốn gõ nó mỗi lần.
Bạn có thể đặt cái này trong .bashrc:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }