【发布时间】: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 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 行引发。
【问题讨论】:
-
如果你删除
include Mongo,错误会改变吗? -
@SaraTibbetts - 不,这是我在试图弄清楚到底发生了什么时添加的,只是忘记删除了。无论哪种方式,错误都是一样的。
标签: ruby mongodb sinatra mongoid unicorn