【问题标题】:Ruby Gem - LoadErrorRuby Gem - 加载错误
【发布时间】:2011-05-09 03:02:00
【问题描述】:

这里的 Ruby 新手试图弄清楚如何使用 Gem,但到目前为止体验不是很好。

通过 gem 安装 mysql2 后,我尝试在一个简单的文件中使用它。

需要'mysql2' #client = Mysql2::Client.new(:host => "localhost", :username => "username")

虽然当我运行它时,我得到:

Parse.rb:1:in `require': 没有要加载的文件——mysql2 (LoadError) 来自 Parse.rb:1

但我的 gem 列表包含 mysql2:

Tanner-Smiths-MacBook-Pro:Humans_vs_Zombies_Parse tanner$ 宝石列表 *** 当地宝石 *** 摘要 (1.0.0) 动作邮件程序(3.0.1、2.3.5、1.3.6) 动作包(3.0.1、2.3.5、1.13.6) actionwebservice (1.2.6) 活动模型(3.0.1) 活动记录(3.0.1、2.3.5、1.15.6) 活动资​​源(3.0.1、2.3.5) 主动支持(3.0.1、2.3.5、1.4.4) act_as_ferret (0.4.3) 雷尔 (2.0.2) 建设者(2.1.2) capistrano (2.5.19, 2.5.2) cgi_multipart_eof_fix (2.5.0) 守护进程 (1.1.0, 1.0.10) dnssd (1.4, 0.6.0) 厄鲁比斯 (2.6.6) 快速线程(1.0.7、1.0.1) fcgi (0.8.8, 0.8.7) 雪貂 (0.11.6) gem_plugin (0.2.3) 高线(1.6.1、1.5.0) hpricot (0.8.3, 0.6.164) i18n (0.4.2) jk-雪貂 (0.11.8.2) libxml-ruby (1.1.4, 1.1.2) 邮件 (2.2.9) 哑剧类型 (1.16) 杂种 (1.1.5) mysql2 (0.2.6) 针 (1.3.0) net-scp (1.0.4, 1.0.1) 网络 sftp (2.0.5, 2.0.1, 1.1.1) 网络SSH(2.0.23、2.0.4、1.1.4) 网络 ssh 网关 (1.0.1, 1.0.0) 多语言 (0.3.1) 机架(1.2.1、1.0.1) 机架式 (0.6.13) 机架测试(0.5.6) 导轨(2.3.5、1.2.6) 铁路(3.0.1) 耙子 (0.8.7, 0.8.3) 红布(4.2.3、4.1.1) 红宝石-openid (2.1.8, 2.1.2) 红宝石雅迪斯 (0.3.4) 红宝石节点(0.1.5) sqlite3-ruby (1.3.2, 1.2.4) 终端 (0.9.4) 雷神 (0.14.4) 树顶 (1.4.8) tzinfo (0.3.23) xmpp4r (0.5, 0.4)

“ruby env”的结果:

RubyGems 环境: - 红宝石版本:1.3.5 - 红宝石版本:1.8.7(2009-06-12 补丁级别 174)[universal-darwin10.0] - 安装目录:/Library/Ruby/Gems/1.8 - RUBY 可执行文件:/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby - 可执行目录:/usr/bin - 红宝石平台: - 红宝石 - 通用达尔文 10 - 宝石路径: - /图书馆/Ruby/Gems/1.8 - /Users/tanner/.gem/ruby/1.8 - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 - 宝石配置: - :update_sources => 真 - :详细 => 真 - :基准 => 假 - :回溯 => 假 - :bulk_threshold => 1000 - 远程资源: - http://gems.rubyforge.org/

我在这里做错了什么?我想不通。

谢谢

-制革商

【问题讨论】:

  • 我遇到了几乎完全相同的问题,您找到解决方案了吗?

标签: ruby gem mysql2


【解决方案1】:

您可能已经注意到,您安装了多个版本的 ruby​​。我强烈建议您使用 RVM 来管理多个 ruby​​ 版本。

这是一个疯狂的猜测,但如果您不使用命令行来运行您的应用程序并使用 TextMate 等工具,您可能需要设置一个 shell 变量“TM_RUBY”以指向安装了 ruby​​gems 的 ruby​​ 版本( 1.8.7 (2009-06-12 补丁级别 174))。

你可以试试:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/irb

要获得安装了 ruby​​gems 的 irb 版本,然后尝试:

require 'rubygems'
require 'mysql2'

如果那行得通并且您对此感到满意,您可以更新 /usr/bin/ruby、/usr/bin/irb、/usr/bin/gem 中的符号链接以指向旧版本的 ruby​​ 或一次再次安装 RVM,让您的生活更轻松。

【讨论】:

    【解决方案2】:

    要获取更多信息,请启动 irb 并运行:

    需要“红宝石” gem 'mysql2' #=> 这会导致错误吗? $:.grep /mysql2/ #=> 如果上一行没有错误,请发布显示的内容

    同样在终端提示符下,运行“gem contents mysql2”。 您是否看到以下结尾的路径?

    lib/mysql2/error.rb lib/mysql2/mysql2.bundle lib/mysql2/client.rb lib/mysql2/result.rb 库/mysql2.rb

    【讨论】:

    • 运行“require 'rubygems'”会带来同样的错误:“LoadError: no such file to load -- ruby​​gems” 从“gem contents mysql2”我可以找到除 lib/mysql2/mysql2.bundle 之外的所有内容
    • 基于此,似乎有2个问题。让我们一次拿一个。无法加载 Rubygems,因为您甚至都不需要它。你可以要求任何其他宝石吗?你有多个版本的 ruby​​ 吗?在 irb 中, Config::CONFIG['bindir'] 的值是多少?在 irb 中,使用它来搜索 ruby​​gems.rb: $:.each {|dir| files=Dir[File.join(dir, 'gem.rb')];如果files.any则放置文件? } ;无
    • 另外,在终端运行:head -1 `which gem`(反引号)。您应该看到 gem 命令正在使用的 ruby​​ 可执行文件。它的目录是否与您从 irb 获得的 Config::CONFIG['bindir'] 的值匹配?
    • 我不需要任何其他宝石,据我所知,没有多个版本的 ruby​​。我无法在 irb 中运行 Config::CONFIG['bindir'],因为它会抛出 Config 是未初始化常量的错误。从此以后,我无法搜索 ruby​​gems.rb。运行 head -1 which gem 导致:#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    • 我注意到“ruby -v”给出了这个输出“ruby 1.8.7(2010-08-16 patchlevel 302)[i686-darwin10]”而在“gem env”中返回“1.8.7 (2009-06-12 补丁级别 174) [universal-darwin10.0]"。我想我不确定我可能有多少个版本的 ruby​​。我猜这两个需要相同?
    【解决方案3】:

    试试:

    require 'rubygems'
    require 'mysql2'
    

    【讨论】:

    • 你的gem env 输出是什么样的?
    • @Tanner:你解决了这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多