2012-02-11 30 views
23

Đây là một câu hỏi phổ biến, nhưng không có câu trả lời nào dường như giải quyết vấn đề. Tôi nhận được thông thường: You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this.Làm thế nào để buộc rack để làm việc xung quanh bình thường "Bạn đã kích hoạt rack ..." lỗi?

Xoá file Gemlock đã không làm gì và chạy bundle install một lần nữa đã không có gì ... chạy bundle install --binstubs đã không giải quyết vấn đề như "chạy ./bin/{rake|rails|etc} từ gốc ứng dụng của bạn "chỉ gây ra nhiều lỗi hơn. Có một cách để có được rack xung quanh vấn đề này dường như phổ biến?

Trả lời

31

Vấn đề là thế này:

  • Bạn có (ít nhất) hai phiên bản rack được cài đặt.

  • Gemfile của bạn gọi cho một phiên bản (1.3.6). Môi trường hiện tại của bạn đang cung cấp một phiên bản khác (1.4.1).

  • Khi ứng dụng của bạn thực thi, môi trường hiện tại đã tải 1.4.1.

  • Bundler biết bạn cần tải 1.3.6 nhưng không thể tải. Bạn không thể tải nhiều hơn một phiên bản của cùng một loại đá quý, vì vậy phiên bản 1.4.1 sẽ thắng vì nó được tải trước.

  • Bundler phàn nàn với bạn.

Gỡ cài đặt các đá quý có vấn đề (ví dụ: gem uninstall rack -v 1.3.6). Thậm chí tốt hơn, sử dụng RVM và đá quý để cô lập đá quý của bạn tốt hơn và bạn sẽ không gặp phải vấn đề này.

+0

Cảm ơn bạn đã có câu trả lời đúng đắn. Tuy nhiên, tôi đã sửa nó theo cách khác. Tôi đã cập nhật trang web thành Rails 3.2.1. May mắn thay phần còn lại của trang web có thể thực hiện cập nhật. – user1149547

+0

Rất vui khi nó hoạt động! –

-1

Mở Gemfile.lock, tìm mục nhập cho giá (1.3.6) và xóa nó.

+2

Bạn không bao giờ nên chỉnh sửa Gemfile.lock theo cách thủ công. –

+0

@ PiotrekOkoński Làm sao anh ta có thể loại bỏ nó? – peterh

1

Tôi gặp sự cố tương tự khi cố triển khai ứng dụng sản xuất. Tôi đang sử dụng rbenv để quản lý môi trường ruby ​​unicorn của tôi cài đặt mặc định vào rbenv. Các phụ thuộc đá quý được liệt kê trong Gemfile đang được cài đặt bởi bundler. Nó xảy ra điều này đã gây ra vấn đề.

Cách khắc phục mà tôi đã thực hiện là gỡ cài đặt unicorn khỏi môi trường của rbenv và cài đặt nó qua Gemfile. Sau khi tất cả, tôi nghĩ rằng cách tiếp cận này là sạch sẽ hơn và đơn giản.

Nếu bạn đang sử dụng RVM, vấn đề xảy ra nếu bạn xác định một đá quý trong môi trường toàn cục phụ thuộc vào giá giống như dấu sao và sau đó xác định một gemset cho từng dự án. Tôi nghĩ rằng điều này là do sự phụ thuộc của đường ray 3.1 (Tôi không chắc chắn). Giải pháp là gỡ cài đặt unicorn (hoặc gem cài đặt giá 1.4.1) từ gemset toàn cầu và cài đặt nó trong gemset cho mỗi dự án.

Nếu bạn đang sử dụng bundler và RVM bạn có hai lựa chọn: - tạo ra một gemset với đường ray và đá quý, cài đặt giá 1.4.1 (phù hợp tốt nhất cho máy trạm dev) - đặt viên ngọc mà phụ thuộc vào giá 1.4. 1 trong Gemfile và để cho các bundler vào ma thuật.

0

Vấn đề này cũng phổ biến khi bạn sao chép dự án từ một kho lưu trữ (ejem. Github), bởi vì nó có thể đã có Gemsfile.lock rồi. Vì vậy, các đá quý nó có thể khác với những môi trường của bạn đã được nạp. Vì vậy, firts có được một bản sao lưu của Gemsfile.lock của bạn, sau đó loại bỏ nó và chạy bó cài đặt - không có sản xuất. Nó sẽ cài đặt tất cả các dependecies của bạn theo với GemFile. Lưu ý rằng nếu ứng dụng đã cũ, nó có thể không hoạt động với môi trường trên máy của bạn.

0

Nếu thông báo lỗi tương tự liên quan đến mùa xuân mang đến cho bạn ở đây, tức là bạn đang nhận được một thông điệp tương tự như này:

Bạn đã kích hoạt mùa xuân 1.4.0, nhưng Gemfile của bạn yêu cầu xuân 1.3.6 .

Giải pháp là giống như câu trả lời được chấp nhận:

gem uninstall spring -v 1.4.0 
0

Đôi khi tất cả các bạn cần làm là chỉ cần cài đặt đá quý.

Tôi có vấn đề này trên OpenShift và đi vào thư mục dự án:

$ RHC ssh APP_NAME

$ cd app-gốc

$ gem install GEM_NAME

sau đó ứng dụng bắt đầu bình thường.

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