当我在'irb'控制台中 $ 加载'game.rb'时,它会返回一堆行,其中第一行包含"Could not load SDL. (LoadError)"



这是$ 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 updategem 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 版本 按此顺序从以下来源读取它:

  1. RBENV_VERSION环境变量(如果已指定)。您可以使用 rbenv shell 命令用于在当前环境中设置此环境变量 外壳会话。

  2. 通过搜索目录找到的第一个 .ruby 版本文件 您正在执行的脚本及其每个父目录直到 到达文件系统的根目录。

  3. 通过搜索当前工作找到的第一个 .ruby 版本文件 目录及其每个父目录,直到到达根目录 的文件系统。您可以在 具有 rbenv 本地命令的当前工作目录。

  4. 全局 ~/.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' .

最新更新