Cách sửa lỗi “Phiên bản Ruby của bạn là 1.9.3, nhưng Gemfile của bạn chỉ định 2.0.0”


76

Tôi đã tạo một dự án Ruby, nhưng khi chạy bundle updatebundle installnó trả về một lỗi:

Your Ruby version is 1.9.3, but your Gemfile specified 2.0.0

Hình ảnh của nó là: http://i.imgur.com/dZMhI11.png?1

Gemfile của tôi là:

ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '4.0.0'

group :development do
    gem 'sqlite3', '1.3.8'
end

gem 'sass-rails', '4.0.0'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.0'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
    gem 'sdoc', '0.3.20', require: false
end

2
Vui lòng không sử dụng hình ảnh hoặc bộ nhớ ngoại vi cho các phần quan trọng của câu hỏi của bạn. Các liên kết bị mục và đứt. Tại thời điểm đó, câu hỏi sẽ không có ý nghĩa đối với những người trong tương lai đang tìm kiếm các giải pháp tương tự. Thay vào đó, hãy sao chép và dán các phần nổi bật của lỗi và tệp đá quý của bạn vào văn bản của câu hỏi.
the Tin Man

Câu trả lời:


26

Nếu bạn chạy, ruby -vbạn sẽ thấy rằng bạn đã cài đặt Ruby 1.9.3, nhưng dòng đầu tiên trong Gemfile của bạn chỉ định rằng bạn muốn sử dụng Ruby 2.0.0.

Bạn nên cài đặt Ruby 2.0.0 hoặc thay đổi dòng đầu tiên trong Gemfile của bạn để chỉ định Ruby 1.9.3.

mẫu của Gemfile:

source 'https://rubygems.org'
ruby "1.9.3"

gem 'pry'

gem 'pry-nav'

# Use with command-line debugging, but not RubyMine
#gem 'debugger'

gem 'bundler'

ur Gemfile được chỉ định 2.1.0 ~ / project / site (newtemplate) $ ruby ​​-v ruby ​​2.1.0p0 (2013-12-25 bản sửa đổi 44422) [i686-linux] ~ / project / site (newtemplate) $ rails -v Ruby của bạn phiên bản là 1.9.3, nhưng Gemfile của bạn chỉ định 2.1.0 ~ / project / site (newtemplate) $ rails s Phiên bản Ruby của bạn là 1.9.3, nhưng Gemfile của bạn đã chỉ định 2.1.0 ~ / project / site (newtemplate) $ gói thực thi rails s Phiên bản Ruby của bạn là 1.9.3, nhưng Gemfile của bạn chỉ định 2.1.0 Làm cách nào để giải quyết vấn đề này?
prasad.surase

32
Tôi sử dụng rvm và ruby -vhiển thị phiên bản ruby ​​của tôi là 2.2.0, nhưng thông báo lỗi cho biết phiên bản ruby ​​là 2.0.0
towry

Câu trả lời @ mistertim của bên dưới cố định vấn đề này đối với tôi$ gem install bundler
Diego Diaz de Berenguer

167

Tôi đã nhận thấy điều này xảy ra khi tôi cố gắng bundle installvới một bộ đá quý RVM mới chưa bao gồm bộ gộp (vì nó rơi trở lại cài đặt bộ gói hệ thống tham chiếu đến ruby ​​hệ thống).

Đang chạy gem install bundlercố định cho tôi.


3
Cảm ơn @mistertim. Hoạt động hoàn hảo đối với tôi khi ruby -vcung cấp phiên bản phù hợp và gói không phát hiện ra nó.
Kenneth

Cám ơn rất nhiều! Tôi không thể hiểu chuyện gì đang xảy ra!
okysabeni

38
hãy nhớ "rbenv rehash" sau "gem install Bundler"
AndrewW

1
bạn đã cứu ngày của tôi. Cảm ơn bạn.
Daniele Vrut

2
Có thể là hiển nhiên, nhưng chỉ cần nói thêm rằng bạn cần thực sự chạy bundlesau khi cài đặt đá quý Bundler. (Nếu lỗi vẫn có thể xảy ra, do nhị phân tạo ra trước đó, điều này có thể gây nhầm lẫn cho mọi người nghĩ nó không làm việc.)
mahemoff

41

Không có cái nào trong số này hiệu quả với tôi, nhưng cuối cùng tôi đã tìm ra:

spring stop

Tôi đã có một dự án Rails 4 sử dụng một thứ gọi là Spring để giữ cho môi trường Rails chạy ở chế độ nền, nhằm tăng tốc độ.

Tôi đã bắt đầu Spring với Ruby 2.1.1 nhưng sau đó tôi đã nâng cấp lên 2.1.2 (trong phiên bản Gemfile và .ruby). Lý thuyết của tôi là Spring tiếp tục chạy trên 2.1.1 và do đó gây ra lỗi này.


Điều này có hiệu quả với tôi sau khi tôi cài đặt Spree, sau đó cập nhật phiên bản Ruby của mình. Cảm ơn bạn.
thép

Cảm ơn! Đây cũng là vấn đề của tôi, tôi nghĩ vậy.
RonLugge

29

Heroku Toolbelt có thể gây ra nó nếu bạn đang sử dụng herokulệnh, hoặc cụ thể hơn là sử dụng bundle exec heroku, điều mà bạn không bao giờ nên làm. Nếu bạn có thể khắc phục sự cố của mình bằng cách xóa bundle exectrước herokucuộc gọi của mình , thì hãy thử cách đó trước. Nếu không, hãy làm theo những gì được gợi ý dưới đây.


Cập nhật ngày 25 tháng 2 năm 2017:
Heroku Toolbelt đã được đổi tên thành Heroku CLI . Xem các liên kết này để biết hướng dẫn cài đặt / gỡ cài đặt được cập nhật:
https://devcenter.heroku.com/articles/heroku-cli
https://github.com/heroku/cli

Bài đăng gốc được cung cấp chưa chỉnh sửa bên dưới (đối với các hướng dẫn kế thừa):


Nếu bạn đã cài đặt bộ công cụ Heroku từ trang web chính thức:

Ở đầu /usr/bin/herokunó có thể nói một cái gì đó như#!/usr/local/heroku/ruby/bin/ruby

Thử chạy /usr/local/heroku/ruby/bin/ruby -vvà xem nó có xuất ra ruby ​​1.9.3 không.

https://github.com/heroku/toolbelt/issues/53

› heroku --version
heroku-toolbelt/3.26.1 (x86_64-darwin10.8.0) ruby/1.9.3

Lưu ý 1.9.3 được chỉ định ở cuối đó.

--- KHÔNG sử dụng trang này và trình cài đặt đóng gói của nó, để cài đặt Heroku CLI trên OSX:

https://toolbelt.heroku.com/

Bởi vì các chi tiết kỹ thuật được liệt kê ở đó rất quan trọng:

Ứng dụng khách dòng lệnh heroku sẽ được cài đặt vào / usr / local / heroku và / usr / local / heroku / bin sẽ được thêm vào PATH của bạn.

Điều này là bất lợi, vì RVM sau đó sẽ làm điều này:

› rvm current
ruby-2.1.1

› heroku --version
heroku-toolbelt/3.26.1 (x86_64-darwin10.8.0) ruby/1.9.3

Có phiên bản 1.9.3 khó chịu đó, ngay cả khi tôi đã chỉ định một phiên bản Ruby khác với RVM.

Gỡ cài đặt đai công cụ Heroku

Không có trình gỡ cài đặt chính thức cho OSX, hãy viết +1 tại đây nếu bạn nghĩ rằng nên có một trình gỡ cài đặt: https://github.com/heroku/toolbelt/issues/8

Gỡ cài đặt theo cách thủ công (di chuyển vào Thùng rác, để giữ bản sao lưu, trong trường hợp xảy ra lỗi):

mv ~/.heroku ~/.Trash
sudo mv /usr/local/heroku ~/.Trash
sudo mv /usr/bin/heroku ~/.Trash

Thay vào đó, hãy cài đặt đai công cụ Heroku bằng homebrew

Bởi vì nó liên kết phiên bản RVM hiện tại với Heroku-toolbelt một cách chính xác. Chạy:

brew install heroku-toolbelt

Heroku toolbelt sau đó sẽ chỉ được cài đặt tại vị trí này:

/usr/local/Cellar/heroku-toolbelt/3.21.4

(Bạn cũng có thể loại bỏ nó một cách dễ dàng brew uninstall heroku-toolbeltnếu bạn muốn.)

Kiểm tra cài đặt:

› rvm current
ruby-2.0.0-head@bloggery

› rvm list

rvm rubies

=* ruby-2.0.0-head [ x86_64 ]
   ruby-2.1-head [ x86_64 ]
   ruby-2.1.1 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

› rvm use ruby-2.1.1
Using /Users/Username/.rvm/gems/ruby-2.1.1

› rvm current
ruby-2.1.1

› heroku --version
heroku-toolbelt/3.26.1 (x86_64-darwin12.0) ruby/2.1.1
You have no installed plugins.

› rvm use ruby-2.0.0-head
Using /Users/Username/.rvm/gems/ruby-2.0.0-head

› heroku --version
heroku-toolbelt/3.26.1 (x86_64-darwin13.4.0) ruby/2.0.0
You have no installed plugins.

Lưu ý rằng bây giờ nó nói 2.0.0 ở cuối lệnh cuối cùng đó. Bây giờ bạn chạy ứng dụng khách Heroku với bất kỳ rvm currentphiên bản ruby ​​nào bạn đã chỉ định trong RVM.


Câu trả lời tuyệt vời, cảm ơn. Lưu ý rằng điều này hoạt động tương tự với rbenv.
Dan Kohn

1
Điều này thật tuyệt vời, tôi đã gặp vấn đề chính xác này. Một nhận xét - liên kết vấn đề của bạn không còn hoạt động.
mattnedrich 24/02/17

Cảm ơn @mattnedrich, tôi đã cập nhật bài đăng với một số liên kết mới ở trên cùng đến vị trí mới trên github: github.com/heroku/cli
Magne

Chỉ có điều đã làm việc cho tôi! Có thực sự là dây đai công cụ heroku cũ đang gây ra sự cố không.
rimkashox

11

Nếu bạn nhập rvm listvà nó hiển thị phiên bản 2.0 của Ruby là phiên bản hiện tại của bạn và bạn vẫn gặp lỗi này, việc nhập đã rvm use (ruby version)khắc phục sự cố này cho tôi.


giải pháp này hoạt động tuyệt vời đối với tôi, vì tôi đang làm việc với nhiều dự án sử dụng phiên bản ruby ​​khác nhau.
Jais Anasrulloh Ja'fari

5

"Tôi đã gặp vấn đề tương tự khi sử dụng rbenv, được cài đặt qua brew.

Tôi không thể tìm ra nó, đã thử tất cả các cách trên, cuối cùng tôi chuyển sang rvm và giải quyết được nó. "

Để trả lời bài đăng này, bạn phải đảm bảo rằng bạn chạy rbenv rehashsau khi cài đặt phiên bản ruby. Điều đó dường như hiệu quả với tôi khi tôi gặp phải vấn đề tương tự.


Chạy rbenv rehashcũng giải quyết được vấn đề cho tôi.
MoskitoHero

Woah, tôi không mong đợi phải cuộn đến mức đó để nhận được câu trả lời mà tôi đang tìm kiếm :) Tôi không muốn chuyển sang rvm.
GabLeRoux

5

Nếu bạn đang sử dụng trình quản lý phiên bản Ruby như RVM hoặc rbenv, thì hãy tạo, trong thư mục cấp cao nhất của dự án của bạn, một tệp có tên .ruby-versionchứa thông số phiên bản trong Gemfile của bạn, ví dụ:

2.0.0

Đó rõ ràng là {rbenv,rvm}cách xác định phiên bản hiện tại.


3

ruby-switch đã bị xóa khỏi ubuntu 14.04 trở lên . Tôi sẽ để lại câu trả lời này cho hậu thế, nhưng có lẽ bạn cần một giải pháp khác. Kiểm tra " Cài đặt ruby ​​2.0 mà không có công tắc ruby? ".


Nếu bạn đã cài đặt phiên bản Ruby mới nhưng vẫn gặp lỗi về sự không khớp của Gemfile, bạn có thể cần sử dụng ruby-switchđể đặt phiên bản Ruby mới làm mặc định của mình:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install ruby2.1 ruby2.1-dev
sudo ruby-switch --set ruby2.1
sudo gem install bundler

2
Đẹp. sudo apt-get install ruby-switchbị mất tích.
Sọc

3

Trong trường hợp của tôi, tôi đã sử dụng rvm get headđể cập nhật phiên bản RVM và nó đã hoạt động.


2

Tôi gặp sự cố này sau khi nâng cấp phiên bản Ruby qua rbenv. Tôi đã thử spring stoplệnh mà ai đó đã đề cập ở trên.

Khi tôi chạy, tôi nhận được một thông báo khác gợi ý rằng tôi chạy gem pristine --all

Cảnh báo: Chạy gem nguyên sơ - tất cả để tạo lại các gemspec đã cài đặt của bạn sẽ cải thiện hiệu suất khởi động của Spring.

Vì vậy, tôi đã chạy lệnh đó, và sau đó mọi thứ trở lại bình thường.


2

lý do chính cho sự cố này là máy và tệp đá quý của bạn sử dụng phiên bản ruby ​​khác

vì vậy có nhiều vấn đề và giải pháp cho vấn đề này, bạn có thể thử từng giải pháp bên dưới

1- đảm bảo máy của bạn cài đặt và sử dụng cùng một phiên bản gemfile nếu máy của bạn không sử dụng cùng một phiên bản, hãy thử cài đặt phiên bản này bằng rvm

$ rvm install ruby_version_you_want

đảm bảo rằng phiên bản đã cài đặt thành công bằng cách sử dụng lệnh này

$ rvm list

và nếu phiên bản mới không được đặt làm mặc định, bạn có thể đặt nó bằng lệnh này

$ rvm --default use ruby_version_you_want 

bạn có thể kiểm tra phiên bản ruby ​​hiện tại

 $ rvm current 
 $ ruby -v 

2- nếu bạn gặp vấn đề tương tự, hãy kiểm tra gói của bạn

  $ gem install bundler
    or
  $ gem update bundler 

3- trong một số trường hợp spring vẫn sử dụng phiên bản cũ nên bạn cần dừng lại

$ ./bin/spring stop

4- một trường hợp khác bạn có thể gõ

$ gem pristine --all 

và cố gắng cài đặt lại gói

5- Ngoài ra trong một số trường hợp sau khi cài đặt phiên bản ruby ​​cập nhật, bạn chỉ cần khởi động lại thiết bị đầu cuối của mình.

6- một giải pháp khác nhưng tôi không đề xuất nó là thư mục cấp cao nhất trong dự án của bạn, hãy tạo một tệp có tên .ruby-version chứa phiên bản ruby ​​đang chạy hiện hoạt của bạn

7- nếu bạn vẫn gặp sự cố này, hãy thử gỡ bỏ ruby ​​và chỉ cài đặt phiên bản cập nhật

 $ aptitude purge ruby 

1

Tôi thấy rằng việc cài đặt lại RVM đã thực hiện được mẹo khi lỗi này xảy ra, vì bất kỳ đề xuất nào khác không hoạt động.


0

Tôi đã gặp vấn đề tương tự khi sử dụng rbenv, được cài đặt qua Homebrew.

Tôi không thể tìm ra nó, đã thử tất cả các cách trên, vì vậy tôi đã chuyển sang RVM để giải quyết nó.


0

Tôi gặp sự cố chính xác này - chỉ vài giây sau khi xem Mac OSX Terminal xác nhận rằng Ruby 2.0.0 đã được cài đặt thành công.

Mac OSX cung cấp phiên bản Ruby lỗi thời đã được cài đặt và đặt làm Ruby mặc định. Để khắc phục sự cố, bạn có thể cài đặt "JewelryBox", một ứng dụng duyên dáng và đáng yêu cung cấp cho bạn GUI để xem và quản lý nhiều hồng ngọc (hữu ích nếu bạn có nhiều môi trường phát triển trên một máy Mac). Bạn có thể sử dụng nó để bỏ chọn Ruby mặc định của Mac OSX và chọn Ruby mới được cài đặt của bạn.


0

Tôi phát hiện ra tập lệnh rake hoặc rails của mình trong thư mục bin đang sử dụng một phiên bản khác của ruby. Tôi đã so sánh hai tập lệnh rake từ hai máy chủ (sản xuất và phát triển) và nó cho tôi thấy chúng đang sử dụng các phiên bản ruby ​​khác nhau. Vì vậy, tôi đã phải cập nhật cho phù hợp.

1c1
< #!/usr/bin/env ruby
---
> #!/usr/bin/env ruby1.9.1

0

Đã gặp lỗi này khi sử dụng đá quý của hành khách. Vì tôi đã cài đặt viên ngọc này với quyền truy cập sudo, nên nó đã có một phiên bản ruby ​​mặc định của riêng nó. Tôi tin rằng lý do có thể là ruby ​​đã được cài đặt mà không có quyền truy cập sudo trên hệ thống của tôi và hành khách không biết phiên bản thực tế của ruby ​​sẽ được sử dụng.

Tuy nhiên, cài đặt gem và mô-đun apache của nó mà không có quyền truy cập sudo đã khắc phục sự cố.


0

Đề xuất cho bất kỳ ai phát hiện ra vấn đề này và không có giải pháp điển hình nào giải quyết được vấn đề này cho bạn, hãy kiểm tra xem bạn có nhiều hơn một trình quản lý phiên bản ruby ​​hay không. Có nhiều trình quản lý phiên bản và một số phần mềm hoặc tập lệnh cài đặt sẽ sử dụng các tập lệnh khác nhau. Tôi biết rbenv, rvm, asdf, và ít nhất một khác mà tôi không nhớ tên của. Tôi đã asdfcài đặt bởi một công cụ khác mà không nhận ra điều đó đã xảy ra và nó gây ra phiên bản được chỉ định không khớp.

Để kiểm tra việc thực thi này which rubyvà hãy xem kỹ đường dẫn. Nếu đó không phải là trình quản lý phiên bản thực tế mà bạn đang mong đợi, thì bạn đang gặp phải vấn đề này. Cách khắc phục đơn giản nhất là sử dụng cái bạn muốn và loại bỏ cái khác. Nếu vì lý do nào đó bạn cần giữ lại cả hai, có thể bạn sẽ cần thay đổi thứ tự các đường dẫn trong tệp .rc của shell.


-1

Tôi chia sẻ mẩu tin này trong một khoảnh khắc rất nhẹ nhõm sau khi cuối cùng đã giải quyết được một vấn đề đã ám ảnh tôi trong nhiều tháng.

rails new myapp
//Your Ruby version is 2.1.5, but your Gemfile specified 2.0.0

Tôi thực sự đã thử mọi giải pháp cho vấn đề này mà tôi có thể tìm thấy trên web và vào cuối ngày, sự cố của tôi là do tôi đã vô tình cài đặt một ứng dụng Rails trong Users / MyName và nó đang đọc Gemfile đó.

Vì vậy, trước khi bạn thử các giải pháp khác nhau được cung cấp ở đây, bạn có thể muốn dành một chút thời gian để xác nhận rằng bạn chưa làm điều gì đó tương tự.


-1

Tôi đang chạy môi trường nhà phát triển Windows.

Tôi vừa thêm C:\Ruby22-x64\binvào biến đường dẫn của mình trước khi heroku\binnhập.

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.