【问题标题】:How do I fix 'NameError: uninitialized constant Mongo::ConnectionFailure如何修复'NameError:未初始化的常量 Mongo::ConnectionFailure
【发布时间】:2019-01-29 20:00:35
【问题描述】:

更新 2: 我能够进一步缩小范围,因为当我运行 rake 时,它​​显然没有加载 所有 Mongo 的类。我在require 'mongo' 之后的config/boot.rb 中添加了puts Mongo.constants。当我运行该应用程序时,它会输出一个包含 Connection 和 ConnectionFailure 类的长列表。当我尝试运行 rake 时,它​​输出的列表要短得多,并且这两个类都丢失了。这是怎么回事?

更新: 通过挽救一个通用异常,我消除了 Mongo::ConnectionFailure 的 NameError,现在它为 Mongo::Connection 抛出了 NameError。所以我猜这是一个 mongo 负载问题。

当我执行puts defined? Mongo 时,它会在我运行应用程序和运行rake 时打印constant。但是,puts defined? Mongo::Connection 在我运行应用程序时会打印 constant,但在我运行 rake 时会显示一个空行。

无论我需要来自 config/boot.rb 还是来自 app.rb 的 mongo,错误都是一样的。


我是 ruby​​ 新手,正在尝试使用 Sinatra、Unicorn 和 Mongo/mongoid 建立一个应用程序。我正在尝试运行 rake 任务,当我运行 rake import:areas 时出现以下错误:

rake aborted!
NameError: uninitialized constant Mongo::ConnectionFailure
/home/amanda/Documents/development/app-name/app.rb:7:in `rescue in block in <class:App>'

mongo 服务器正在运行,代码通过早期的 Mongo::Connection 调用(如果未加载 mongo,我希望它抛出 NameError)没有错误。观察 mongod 控制台,它似乎甚至没有命中 mongo,因为控制台日志中没有任何连接尝试的迹象。

当我运行应用程序本身(使用heroku localbundle exec unicorn -p $PORT -c "/path/to/unicorn.rb")时,它会启动并在适当的端口上侦听,我可以毫无问题地访问根端点。在启动时观察 mongod 控制台,我可以看到它成功连接到数据库。我正在运行 mongo gem 版本 1.10.2 和 mongoid 3.1.6(我正在使用的代码库的要求)。

rakefile 的相关行:

require "./config/boot"

namespace "import" do
    task "areas" do
        # code here
    end
end

config/boot.rb:

require 'sinatra'
require 'mongo'
require 'mongoid'
require './app'

mongoid.yml:

development:
  clients:
    default:
      database: db-name
      hosts:
        - localhost:27017
      options:
  options:

app.rb:

class App < Sinatra::Base
  configure do
    # mongo
    begin
      mongo_db = Mongo::Connection.new.db "db-name"
      set :mongo_db, mongo_db
    rescue Mongo::ConnectionFailure
      set :mongo_db, {}
    end
  end
  # more code here
end

我在这里缺少什么?我用谷歌搜索的任何东西都不像这个问题。我希望这个错误会在Mongo::Connection 而不是Mongo::ConnectionFailure 行引发。

【问题讨论】:

  • 如果你删除include Mongo,错误会改变吗?
  • @SaraTibbetts - 不,这是我在试图弄清楚到底发生了什么时添加的,只是忘记删除了。无论哪种方式,错误都是一样的。

标签: ruby mongodb sinatra mongoid unicorn


【解决方案1】:

事实证明 Gemfile.lock 不知何故损坏了,rake 使用的 mongo 版本比 heroku local 的版本新。 :-/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多