heroku mongohq and mongoid Mongo::ConnectionFailure
Solution 1
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.
Solution 2
It seems to me that specifying host in the defaults hash overrides the value in uri. To fix it just remove the host from the default, here is my config/mongo.yml:
defaults: &defaults
allow_dynamic_fields: true
parameterize_keys: true
persist_in_safe_mode: true
raise_not_found_error: true
reconnect_time: 3
use_object_ids: true
production:
<<: *defaults
uri: <%= ENV['MONGOHQ_URL'] %>
Here is the snippet from mongoid's config.rb:
mongo_uri = settings["uri"].present? ? URI.parse(settings["uri"]) : OpenStruct.new
name = settings["database"] || mongo_uri.path.to_s.sub("/", "")
host = settings["host"] || mongo_uri.host || "localhost" # <= look here
port = settings["port"] || mongo_uri.port || 27017
Solution 3
We have some mongoid docs on our heroku section of our docs. They haven't been released officially yet but you can get it to it already. Don't expect much in the way of styles and content yet, but it does have some info that you might find useful for mongoid.
https://devcenter.heroku.com/articles/mongohq
oma
I just love coding. I'm a serial entrepreneur that's basically just really into keeping it real and applying lean, high-five driven development. CTO/CO-Founder of Paladin Software - the number one MCN software platform. A stack heavy on Ruby and JavaScript Founder of Rubynor AS - a Norwegian consultancy and product development company focused on Ruby and startups.
Updated on June 16, 2022Comments
-
oma almost 2 years
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 setMONGOHQ_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'?