你的Ruby版本是2.6.8,但你的Gemfile指定2.7.5



当我运行npx react-native init AwesomeProject时,会发生这种情况。

当我用ruby -v检查系统ruby版本时,它已经是2.7.5了。ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-darwin21]。有人对这个问题有什么想法吗?

听起来像是在使用rvm来管理Ruby版本。您需要安装并运行正确的版本,而不是删除当前版本。

之类的
rvm install 2.7.5
rvm use 2.7.5

Gemfile不是(直接)你的问题

Gemfile与解决这个问题无关。它只是触发它,因为你的项目内Ruby版本不匹配RubyGems(通过GemfileGemfile.lock)期望作为约束。它可以是最小版本,精确版本,近似版本,等等。在项目中有很多方法可以指定版本约束,而Gemfile就是Bundler抛出与约束相关的异常的地方。

您可以通过简单地从Gemfile或gemspec中删除对Ruby更新版本的要求来解决这个问题,删除Gemfile。锁定,并重新运行Bundler。但是,如果您的代码依赖于较晚版本中的特性,这只会给您带来其他问题。你真的应该在项目目录中发现是什么改变了你的Ruby环境。

.

发生这种情况的原因有很多,但是如果您的系统Ruby是2.7.5,那么您需要检查项目目录中的各种dotfile,例如:
  1. .ruby-version
  2. .rvmrc
  3. ~/.rvmrc
  4. .envrc
  5. .env

或影响shell环境或您正在使用的任何Ruby版本管理器的各种其他文件。大多数Ruby版本管理器都遵循.ruby-version,但有些版本管理器使用其他文件,包括可能在其他地方设置的默认值或最小值。IDE通常也有自己的特定于项目的配置文件,它们有时可以被设置为覆盖项目的标准设置。

另外,除了Gemfile本身,确保检查Gemfile.lock*.gemspec,以防在那里指定了某些内容或受到其他依赖项的约束。

巡检环境变量

您还应该查看项目目录中与Ruby和rubygems相关的环境变量,以了解如何在项目中设置各种值。例如:

printenv | grep -E '^(RUBY|GEM)' | sort

<<h2>工作行/h2>此外,您应该检查您所依赖的任何可执行Ruby或shell脚本中的shebang行,以查看是否正在调用特定的非系统Ruby。例如:

grep -Enr '^#.*ruby' *.rb | grep -F '.rb:1:'

将找到所有正确出现在Ruby文件第一行的shebang行。这将指向特定的Ruby,如#!/usr/bin/ruby,或者可能对#!/usr/bin/env ruby使用PATH查找。

Shell脚本可能更难检查,因为可能会调用其他可执行文件甚至exec命令,所以如果您正在寻找比shebang行更低的解释器调用,则需要更自由地使用grepping。

CheckingPATHOrder

#!/usr/bin/env ruby的情况下,您应该检查PATH环境变量,看看为什么没有首先调用您想要的Ruby。使用which -a ruby(如果您的操作系统支持)将按照shell调用它们的顺序显示PATH中的所有红宝石。您可能只是调用了一个意想不到的Ruby版本,该版本首先出现在PATH中。

相关内容

最新更新