1

更新:

我找到了简单的答案,这完全是我自己的错:我将上面的代码存储在一个名为“eventmachine.rb”的文件中。因此,当我需要“eventmachine”时,它只是导入了相同的文件,该文件不包含 EventMachine 的定义。

所以这并不是一篇关于 EventMachine 的文章。

原帖:

对不起,但发生了什么事?

require 'rubygems'
require 'eventmachine'

EventMachine

uninitialized constant EventMachine

当我运行“ruby myfile.rb”时,在 TextMate 和控制台上。

但是如果我在 IRB 中输入相同的内容,我会得到

=> EventMachine

.

...

我非常沮丧,以至于我按照http://blog.carlmercier.com/2007/12/14/how-to-fix-that-rubygems-mess-on-leopard/上的轻率说明进行操作——清除我的 Ruby 和Rubygems 环境并从 MacPorts 重新安装它们。IRB 仍然有效,TextMate/commandline 仍然以同样的方式失败。我什至将我的 TextMate PATH 减少到现在安装了 Ruby、Gem 和 IRB 的一个位置:/opt/local/bin——这就是 which 报告的内容。

最后,当我

puts Gem.path

在 IRB、TextMate 或控制台上,我得到相同的路径。

4

3 回答 3

4

我找到了简单的答案,这完全是我自己的错:我将上面的代码存储在一个名为“eventmachine.rb”的文件中。因此,当我需要“eventmachine”时,它只是导入了相同的文件,该文件不包含 EventMachine 的定义。

于 2011-07-16T17:32:24.483 回答
1

你安装了gem吗?

gem install eventmachine

通常,您显示的代码中的错误是因为该行

require 'eventmachine'

失败并且该类/模块常量 EventMachine 未定义。

此外,如果您正在运行 ruby​​ 1.9,则不再需要

require 'rubygems'
于 2011-07-14T22:41:32.403 回答
0

我不明白为什么消息是“未初始化的常量”,但问题是你没有提供任何运行。我的代码出现同样的错误,但如果我将其更改为:

EventMachine::run{
   EventMachine::add_periodic_timer( 0.1) { 
    print '.'
   }
}

然后它完全按照我的预期工作 - 它每秒打印 10 个点。

于 2011-07-15T00:02:14.627 回答