How do I fix 'NameError: uninitialized constant Mongo::ConnectionFailure

How do I fix 'NameError: uninitialized constant Mongo::ConnectionFailure

更新二: 我能够进一步缩小到这样一个事实,即当我 运行耙。我在 require 'mongo' 之后的 config/boot.rb 中添加了 puts Mongo.constants。当我 运行 应用程序时,它会输出一长串包括 Connection 和 ConnectionFailure 类。当我尝试 运行 耙子时,它输出一个更短的列表,并且那两个 类 不见了。这是怎么回事?

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

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

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


我是 ruby 的新手,正在尝试使用 Sinatra、Unicorn 和 Mongo/mongoid 设置应用程序。我正在尝试 运行 抽取任务,当我 运行 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 服务器处于 运行ning 状态,代码通过较早的 Mongo::Connection 调用(如果 mongo '加载)没有错误。查看 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 行抛出。

事实证明 Gemfile.lock 以某种方式损坏了,rake 使用的 mongo 版本比 heroku local 更新。 :-/