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 local
或 bundle 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 更新。 :-/
更新二:
我能够进一步缩小到这样一个事实,即当我 运行耙。我在 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 local
或 bundle 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 更新。 :-/