UPDATE 9th june 2012:
Setup with mongoid 3.0.0.rc at heroku, see this gist: https://gist.github.com/2900804
UPDATE 22th jan 2011:
Uri now takes precedence in mongoid.yml
https://github.com/mongoid/mongoid/issues/issue/266
UPDATE 12th aug 2010: Although I got an accepted answer 6th may from Jackues Crocker, there are aspects of this issue that makes it easy to mess up! It happened to me yet again and I decided to research the mongoid source code. So, here it goes:
Currently, host: port: name/database: settings TAKE PRECEDENCE OVER the uri: setting. Hence, the awfully uninformative error message is happening due to a request to localhost:xxxx and not to flame.local.mongohq.com:xxxx
This will break!
defaults: &defaults
host: localhost <- THIS 'OVERWRITES' host in the uri!
production:
<<: *defaults <- BE CAREFUL WITH WHAT YOU BRING IN. THE host: FROM DEFAULTS WILL BE THE ONE APPLIED, not your uri host.
uri: <%= ENV['MONGOHQ_URL'] %>
fix it with either removing the host: in defaults, and/or removing the <<: *defaults
ORIGINAL Q:
I have added the mongoHQ addon for mongodb at heroku. It crashes with :
connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)
The descriptions online (heroku mongohq) are more directed towards mongomapper, as I see it. I'm running ruby 1.9.1 and rails 3-beta with mongoid.
My feeling says that there's something with ENV['MONGOHQ_URL']
, which it says the MongoHQ addon sets, but I haven't set MONGOHQ_URL
anywhere in my app. I guess the problem is in my
mongoid.yml ?
defaults: &defaults
host: localhost
development:
<<: *defaults
database: aliado_development
test:
<<: *defaults
database: aliado_test
# set these environment variables on your prod server
production:
<<: *defaults
host: <%= ENV['MONGOID_HOST'] %>
port: <%= ENV['MONGOID_PORT'] %>
username: <%= ENV['MONGOID_USERNAME'] %>
password: <%= ENV['MONGOID_PASSWORD'] %>
database: <%= ENV['MONGOID_DATABASE'] %>
It works fine locally, but fails at heroku, more stack trace:
==> crashlog.log <==
Cannot write to outdated .bundle/environment.rb to update it
/disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/rack-1.1.0/lib/rack.rb:14: warning: already initialized constant VERSION
/disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongo-0.20.1/lib/mongo/connection.rb:435:in `connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)
from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongo-0.20.1/lib/mongo/connection.rb:112:in `initialize'
from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4
/lib/mongoid/railtie.rb:32:in `new'
from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid/railtie.rb:32:in `block (2 levels) in <class:Railtie>'
from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid.rb:110:in `configure'
from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid/railtie.rb:21:in `block in <class:Railtie>'
from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/railties-3.0.0.beta3/lib/rails/initializable.rb:25:in `instance_exec'
.....
It all works locally, both tests and app. I'm out of ideas... Any suggestions?
PS: Somebody with high repu mind create the tag 'mongohq'?
Mongoid (master) now has a URI option in mongoid.yml. So you could do:
production:
uri: <%= ENV['MONGOHQ_URL'] %>
To use mongoid master in your project, set this in your Gemfile
gem "mongoid", :git => "[email protected]:mongoid/mongoid.git"
Hopefully a new gem will be released soon which will clean things up.