我知道有很多关于这个的问题有各种ruby版本。我相信我已经用尽所有常规修复(通常可以正常工作)。
这个应用程序一直在工作,在我现在所处的环境中工作了几个月(在此之前的几年里为其他人)。它以前使用过ruby 2.4.4和ruby 2.5.1(用rbenv切换)。
我想要ruby 2.5.1并且bundler抱怨我的ruby版本是2.4.4
$ bundle exec rspec
Your Ruby version is 2.4.4, but your Gemfile specified 2.5.1
$ rbenv exec bundle exec rspec
Your Ruby version is 2.4.4, but your Gemfile specified 2.5.1
注意:rspec
就是一个例子,但它发生在bundle exec
前面的任何命令中
我已经检查了我所知道的所有地方,以及互联网建议我应该看的所有地方,并且找不到将红宝石设置为2.4.4的内容(详见下文)。
所以真正的问题是 - 下一个在哪里寻找rbenv
或bundler
或两者的错误配置文件?
所有这些都给了我正确的红宝石版本
基础:
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
$ which ruby
/home/vagrant/.rbenv/shims/ruby
$ rbenv which ruby
/home/vagrant/.rbenv/versions/2.5.1/bin/ruby
$ bundle -v
Bundler version 1.16.3
$ which bundle
/home/vagrant/.rbenv/shims/bundle
$ rbenv which bundle
/home/vagrant/.rbenv/versions/2.5.1/bin/bundle
$ bundle platform --ruby
ruby 2.5.1p57
$ rbenv version
2.5.1 (set by /path/to/app/.ruby-version)
$ rbenv local
2.5.1
$ rbenv global
2.5.1
$ head Gemfile -n 6
source 'https://rubygems.org'
git_source(:github) { |name| "https://github.com/#{name}.git" }
ruby '2.5.1'
gem 'rails', '~> 5.2.0'
$ tail Gemfile.lock -n 5
RUBY VERSION
ruby 2.5.1p57
BUNDLED WITH
1.16.3
捆绑环境
$ bundle env
## Environment
```
Bundler 1.16.3
Platforms ruby, x86_64-linux
Ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Full Path /home/vagrant/.rbenv/versions/2.5.1/bin/ruby
Config Dir /home/vagrant/.rbenv/versions/2.5.1/etc
RubyGems 2.7.6
Gem Home /home/vagrant/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
Gem Path /home/vagrant/.gem/ruby/2.5.0:/home/vagrant/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
User Path /home/vagrant/.gem/ruby/2.5.0
Bin Dir /home/vagrant/.rbenv/versions/2.5.1/bin
Tools
Git 1.9.1
RVM not installed
rbenv rbenv 1.1.1-37-g1c772d5
chruby not installed
```
## Bundler Build Metadata
```
Built At 2018-07-17
Git SHA 12e73cab7
Released Version true
```
... (snip)
RUBY VERSION
ruby 2.5.1p57
BUNDLED WITH
1.16.3
宝石环境
RubyGems Environment:
- RUBYGEMS VERSION: 2.7.6
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/vagrant/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
- USER INSTALLATION DIRECTORY: /home/vagrant/.gem/ruby/2.5.0
- RUBY EXECUTABLE: /home/vagrant/.rbenv/versions/2.5.1/bin/ruby
- EXECUTABLE DIRECTORY: /home/vagrant/.rbenv/versions/2.5.1/bin
- SPEC CACHE DIRECTORY: /home/vagrant/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/vagrant/.rbenv/versions/2.5.1/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/vagrant/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
- /home/vagrant/.gem/ruby/2.5.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /home/vagrant/.rbenv/versions/2.5.1/bin
- /home/vagrant/.rbenv/libexec
- /home/vagrant/.rbenv/plugins/ruby-build/bin
- /home/vagrant/.rbenv/shims
- /home/vagrant/.rbenv/shims
- /home/vagrant/.rbenv/shims
- /home/vagrant/.rbenv/bin
- /home/vagrant/.rbenv/shims
- /home/vagrant/.rbenv/bin
猫
$ cat /home/vagrant/.rbenv/versions/2.5.1/bin/bundler
#!/home/vagrant/.rbenv/versions/2.5.1/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'bundler' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
version = ">= 0.a"
if ARGV.first
str = ARGV.first
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
version = $1
ARGV.shift
end
end
if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('bundler', 'bundler', version)
else
gem "bundler", version
load Gem.bin_path("bundler", "bundler", version)
end
你是从项目目录中执行命令ruby -v
吗?此外,如果您安装了新的Ruby版本,则还应更新您的捆绑包。 gem install bundler
或gem update bundler
将为您做这件事。
游戏有点晚了,但也许这会对某人有所帮助:
TLDR;您可能有一个冲突的版本管理器。
更多背景资料:
我使用thinkbot的笔记本电脑脚本来管理我在计算机上安装的软件。我已经很久没有更新了。我终于更新了,但在更新后发现我的应用程序不再有效。经过相当多的时间花在这个问题的通常建议后,我终于更加关注我收到的实际错误,并注意到对asdf
的引用。事实证明asdf
是一个通用语言版本管理器,并且脚本已经开始使用它了。在那之前我从未听说过。我读了一些文档,听起来不错,所以我删除了rbenv
,做了基本的设置,瞧,我的应用程序再次运行!如果有其他ruby版本管理器,这可能也是相关的。
长话短说,拥有多个版本管理器可能是一个坏主意,这可能导致运行应用程序的各种问题。