更新2:
我能够进一步缩小范围,以至于当我运行耙子时,它显然没有加载Mongo类的 all 。我在puts Mongo.constants
之后在config / boot.rb中添加了require 'mongo'
。当我运行该应用程序时,它会输出一个长列表,其中包括Connection和ConnectionFailure类。当我尝试运行耙时,它输出的列表要短得多,并且缺少这两个类。这是怎么回事?
更新: 通过挽救通用异常,我消除了Mongo :: ConnectionFailure的NameError,现在它为Mongo :: Connection抛出了NameError。所以我想这是一个mongo加载问题。
当我执行puts defined? Mongo
时,当我运行应用程序和运行rake时,它会打印constant
。但是,puts defined? Mongo::Connection
会在我运行应用程序时显示constant
,但在运行rake时会显示空白行。
无论我是从config / boot.rb还是从app.rb要求mongo,错误均相同。
我是红宝石的新手,并试图与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
行。
答案 0 :(得分:0)
事实证明Gemfile.lock某种程度上已损坏,并且rake正在使用比heroku local更新的mongo版本。 :-/