当我在'irb'控制台中加载'game.rb'时,它会返回一堆行,其中第一行包含“无法加载SDL。(LoadError)”

时间:2016-01-26 22:38:43

标签: ruby rbenv irb

这是$ 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$

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我认为你必须学习如何使用rbenvChoosing the Ruby Version

  

选择Ruby版本

     

执行填充程序时,rbenv会确定要使用的Ruby版本   请按以下顺序从以下来源阅读:

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

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

  4.   
  5. 通过搜索当前工作找到的第一个.ruby-version文件   目录及其每个父目录,直到到达根目录   你的文件系统。您可以修改.ruby-version文件   使用rbenv local命令的当前工作目录。

  6.   
  7. 全局〜/ .rbenv / version文件。您可以使用以下命令修改此文件   rbenv全局命令。如果不存在全局版本文件,则为rbenv   假设你想使用&#34;系统&#34;红宝石即。无论什么版本   如果rbenv不在您的路径中,请运行。

  8.   

您可以使用rbenv命令显示选项并查询当前环境的状态。检查一下,这是我自己解释的。

答案 1 :(得分:1)

查看searchview.jsp显示的PATH:

web.xml

您有多个问题:

  • 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之前有/usr/local/bin

    这将导致.rbenv/shims或任何与Ruby相关的命令在由rbenv管理的任何Ruby之前在.rbenv/bin中搜索。并且,如果发现它将被执行,即使您希望rbenv使用其他版本。

  • 您的主目录中有剩余的ruby,如果在之前的任何目录中都没有发生命中,则可能会搜索到该/usr/local/bin,这可能会导致代码崩溃,因为它没有指向其他内容已经存在了。

解决此问题:

  • 查看〜/ .bashrc和〜/ .bash_profile文件,找出修改PATH的位置并进行清理。互联网上有很多资源解释如何定义PATH,但简而言之,您希望在.rvm/bin之前和.rbenv之前在/usr/local/bin目录中搜索任何/usr/local/bin
  • 查看〜/ .bashrc和〜/ .bash_profile并确保正确初始化rbenv。该文档解释了如何做到这一点。
  • 删除〜/ .rvm目录。 rbenv和RVM并不是很好的伙伴,因为他们只是设计用来做同样的事情,只是他们以不同的方式做事。如果他们都试图管理你的红宝石,随之而来的拔河会让你疯狂。

程序员必须了解他们的底层操作系统,以免弄乱它。您需要了解shell如何使用〜/ .bashrc和〜/ .bash_profile,它如何搜索PATH并解析可执行文件的名称,以及如何初始化rbenv。

有关rbenv初始化的SO有多个答案,所以搜索。您将找到该信息。

答案 2 :(得分:0)

在你提出的问题中:

require 'rubygems'
require 'rubygame'

我认为你不需要第一个要求,但你的问题是你需要你所处的文件。尝试完全删除它们并运行你的程序,即

# No require statements
class Game
end

您的错误消息显示问题来自第2行,即require 'rubygame'