未初始化的常量 Twitter (NameError)

Posted

技术标签:

【中文标题】未初始化的常量 Twitter (NameError)【英文标题】:uninitialized constant Twitter (NameError) 【发布时间】:2012-11-08 08:50:02 【问题描述】:

大家好,我在使用 twitter gem 时遇到了问题。我有一个包含此内容的文件 (twitter.rb)

require "rubygems"
require "twitter"

puts Twitter.user_timeline("roykasa").first.text
puts Twitter.user("roykasa").location
search = Twitter::Search.new
search.containing("hate").to("StewieJokess").
result_type("recent").each do |r| puts r.text end

当我运行文件时,我得到这个错误: 我在 SO 上的某个地方读到了一个用户遇到类似问题的地方,他通过安装新版本的 ruby​​ 和 ruby​​gems 解决了这个问题,但我遇到的问题是正在运行 suse 12.1,并且正在运行 ruby​​ 和 ruby​​ gems 的最新版本。在任何地方都找不到来自第 3 方的 rpm。至少我已经搜索过了。有人知道另一种方法吗?

【问题讨论】:

【参考方案1】:

如果您运行的是 Ruby 1.8.x,您应该能够通过将您自己的脚本重命名为不同于 twitter.rb 的任何名称来解决您的问题。

这是因为twitter gem 中的主文件的名称与此完全相同,并且您的文件可能会在$LOAD_PATH 命令创建的组合虚拟文件系统中覆盖它。在 Ruby 1.9.x 之前,require 不仅从库目录加载,而且更喜欢加载相对于进程当前工作目录的文件,在这种情况下,是脚本所在的目录。

【讨论】:

不,这无济于事,因为我有另一个名为 followers-location.rb 的文件,当我运行它时也会引发同样的错误。甚至当我在 irb 解释器中逐行运行这个文件时,我在 puts Twitter.user_timeline("roykasa").first.text 的地方得到同样的错误 可能是因为您在与文件相同的工作目录中运行irb 命令? followers-location.rb 也可能位于同一个文件夹中。您的工作目录中的任何文件都不应与您要在脚本中加载的任何 gem 中的任何文件具有相同的相对路径,因为如果这样做,它将不会从 gem 加载,而是从您的工作目录加载。【参考方案2】:

不要将您的文件命名为 twitter.rb,还要确保同一目录中没有其他名称为 twitter.rb

的文件

【讨论】:

以上是关于未初始化的常量 Twitter (NameError)的主要内容,如果未能解决你的问题,请参考以下文章

未初始化的常量 ExecJS::Runtimes::RubyRacerRuntime

未初始化的常量 ApplicationRecord

未定义的方法和未初始化的常量错误

未初始化的常量 Logger (NameError)

rails 链接表“未初始化的常量”错误

HomePresenter 的未初始化常量