这是$ gem env
的输出:
Michels-MacBook-Pro:~ michelfrechette$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.5.1
- RUBY VERSION: 2.2.3 (2015-08-18 patchlevel 173) [x86_64-darwin15]
- INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.2.0
- USER INSTALLATION DIRECTORY: /Users/michelfrechette/.gem/ruby/2.2.0
- RUBY EXECUTABLE: /usr/local/opt/ruby/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/bin
- SPEC CACHE DIRECTORY: /Users/michelfrechette/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /usr/local/Cellar/ruby/2.2.3/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-15
- GEM PATHS:
- /usr/local/lib/ruby/gems/2.2.0
- /Users/michelfrechette/.gem/ruby/2.2.0
- /usr/local/Cellar/ruby/2.2.3/lib/ruby/gems/2.2.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Library/Frameworks/Python.framework/Versions/3.5/bin
- /usr/local/bin
- /Users/michelfrechette/.rbenv/shims
- /Users/michelfrechette/.rbenv/bin
- /usr/local/bin
- /usr/local/sbin
- /usr/local/mysql/bin
- /usr/bin
- /usr/local/heroku/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /Users/michelfrechette/.RVM/bin
- /Applications/Postgres.app/Contents/Versions/9.4/bin
Michels-MacBook-Pro:~ michelfrechette$
我正在使用$ ruby game.rb
运行一个脚本,其中包含:
require 'rubygame'
class Game
end
我正在使用 rbenv 来管理我的 Ruby 版本,它目前设置为 2.3.0-dev;曾几何时,我在 MacBook-Pro 上安装了 RVM。
当我运行brew update
或gem update
等命令时,一切似乎都很好。
我尝试使用 ruby 2.2.0,但它没有区别。
当我跑ruby -v
时,我得到了2.3.0p173
.
发生这种情况是因为我曾经使用 RVM 作为我的版本管理器吗?
这是我在运行文件时应该看到的输出吗?
Last login: Tue Jan 26 16:27:35 on ttys005
Michels-MacBook-Pro:~ michelfrechette$ ruby game.rb
/usr/local/lib/ruby/gems/2.2.0/gems/nice-ffi-0.4/lib/nice-ffi/library.rb:98:in `load_library': Could not load SDL. (LoadError)
from /usr/local/lib/ruby/gems/2.2.0/gems/ruby-sdl-ffi-0.4/lib/ruby-sdl-ffi/sdl.rb:51:in `<module:SDL>'
from /usr/local/lib/ruby/gems/2.2.0/gems/ruby-sdl-ffi-0.4/lib/ruby-sdl-ffi/sdl.rb:34:in `<top (required)>'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:67:in `require'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:67:in `require'
from /usr/local/lib/ruby/gems/2.2.0/gems/rubygame-2.6.4/lib/rubygame/main.rb:22:in `<top (required)>'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:119:in `require'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:119:in `require'
from /usr/local/lib/ruby/gems/2.2.0/gems/rubygame-2.6.4/lib/rubygame.rb:44:in `block in <top (required)>'
from /usr/local/lib/ruby/gems/2.2.0/gems/rubygame-2.6.4/lib/rubygame.rb:43:in `each'
from /usr/local/lib/ruby/gems/2.2.0/gems/rubygame-2.6.4/lib/rubygame.rb:43:in `<top (required)>'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:126:in `require'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:126:in `rescue in require'
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in `require'
from game.rb:2:in `<main>'
Michels-MacBook-Pro:~ michelfrechette$
我该如何解决这个问题?
我认为你必须学习如何使用rbenv
:选择Ruby版本
选择 Ruby 版本
执行填充程序时,rbenv 会确定要使用的 Ruby 版本 按此顺序从以下来源读取它:
RBENV_VERSION环境变量(如果已指定)。您可以使用 rbenv shell 命令用于在当前环境中设置此环境变量 外壳会话。
通过搜索目录找到的第一个 .ruby 版本文件 您正在执行的脚本及其每个父目录直到 到达文件系统的根目录。
通过搜索当前工作找到的第一个 .ruby 版本文件 目录及其每个父目录,直到到达根目录 的文件系统。您可以在 具有 rbenv 本地命令的当前工作目录。
全局 ~/.rbenv/version 文件。您可以使用 RBENV全球司令部。如果全局版本文件不存在,则 rbenv 假设你想使用"系统"Ruby——即任何版本。 如果 RBENV 不在您的路径中,请运行。
您可以使用 rbenv
命令显示选项并查询当前环境的状态。看看吧,我会说这是自我解释。
看看你的 PATH 由 gem env
显示:
- /Library/Frameworks/Python.framework/Versions/3.5/bin
- /usr/local/bin
- /Users/michelfrechette/.rbenv/shims
- /Users/michelfrechette/.rbenv/bin
- /usr/local/bin
- /usr/local/sbin
- /usr/local/mysql/bin
- /usr/bin
- /usr/local/heroku/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /Users/michelfrechette/.rvm/bin
- /Applications/Postgres.app/Contents/Versions/9.4/bin
您有多个问题:
/usr/bin
和/usr/local/bin
的多种定义您在
.rbenv/shims
或.rbenv/bin
之前有/usr/local/bin
这将导致
ruby
或与 Ruby 关联的任何命令在 rbenv 管理的任何 Ruby 之前/usr/local/bin
中搜索。而且,如果发现将被执行,即使您希望 rbenv 使用不同的版本。您的主目录中还有一个剩余的
.rvm/bin
,如果之前的任何目录中都没有发生命中,则可以搜索该,这可能会导致代码崩溃,因为它指向的其他内容似乎不再存在。
要解决此问题,请执行以下操作:
- 查看您的 ~/.bashrc 和 ~/.bash_profile 文件,找出您的 PATH 被修改的位置并清理它。互联网上有很多资源解释了如何定义 PATH,但简而言之,您希望在
/usr/local/bin
之前在.rbenv
目录中搜索,在任何/usr/bin
之前在/usr/local/bin
中搜索。 - 查看 ~/.bashrc 和 ~/.bash_profile 并确保 rbenv 正在正确初始化。该文档解释了如何执行此操作。
- 删除 ~/.rvm 目录。 rbenv 和 RVM 不是很好的伴侣,因为它们被设计为做同样的事情,只是它们以不同的方式做。随之而来的拉锯战,如果他们都试图管理你的红宝石,会让你发疯。
程序员必须充分了解他们的底层操作系统,以免弄乱它。你需要了解你的 shell 如何使用 ~/.bashrc 和 ~/.bash_profile,它如何搜索 PATH 并解析可执行文件的名称,以及应该如何初始化 rbenv。
关于 rbenv 初始化,SO 有多个答案,因此请搜索。您将找到相关信息。
在您的问题中,您有:
require 'rubygems'
require 'rubygame'
我认为您不需要第一个要求,但是您的问题是您需要您所在的文件。尝试完全删除它们并运行您的程序,即
# No require statements
class Game
end
您的错误消息说问题来自第 2 行,这是require 'rubygame'
.