MongoDB won't connect to MongoHQ using Mongoid
mongodb, mongohq, mongoid, ruby-on-rails, ruby-on-rails-3
Solution
This is how my production mongoid.yml looks like
<% if ENV['MONGOLAB_URI'] %>
<% uri = URI.parse(ENV['MONGOLAB_URI']) %>
production:
<<: *defaults
sessions:
default:
<<: *default_session
database: <%= uri.path.sub('/','') %>
username: <%= uri.user %>
password: <%= uri.password %>
hosts:
- <%= uri.host %>:<%= uri.port %>
<% end %>
and this works for me
Problem
I've just started a brand new rails project and the first task I'm trying to complete is creating an object and having it save within my database. I went through the automated way of generating an object, in this case a URL object as follows: ``` rails generate scaffold Url domain:string ``` I've also tested out two separate mongoid.yml configuration settings. The first is as follows: ``` development: sessions: default: # Defines the name of the default database that Mongoid can connect to. # (required). uri: mongodb://[username]:[password]@flame.mongohq.com:27046/[database] options: consistency: :strong ``` The result of this configuration is that when a query takes place, I get the following error: ``` The operation: #<Moped::Protocol::Query @length=39 @request_id=5 @response_to=0 @op_code=2004 @flags=[] @full_collection_name=".urls" @skip=0 @limit=0 @selector={} @fields=nil> failed with error 13075: "db name can't be empty" ``` I also tested with the following configuration: ``` development: uri: mongodb://[username]:[password]@flame.mongohq.com:27046/[database] ``` When the code gets to the create method of the urls_controller it fails at @url.save with the following error: ``` mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:100:in `parse' mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:61:in `create_session' mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:43:in `default' mongoid (3.0.0.rc) lib/mongoid/sessions.rb:109:in `default' mongoid (3.0.0.rc) lib/mongoid/sessions.rb:354:in `__session__' mongoid (3.0.0.rc) lib/mongoid/sessions.rb:199:in `mongo_session' mongoid (3.0.0.rc) lib/mongoid/sessions.rb:157:in `collection' mongoid (3.0.0.rc) lib/mongoid/sessions.rb:25:in `collection' mongoid (3.0.0.rc) lib/mongoid/persistence/operations.rb:26:in `collection' mongoid (3.0.0.rc) lib/mongoid/persistence/operations/insert.rb:27:in `block in persist' mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:25:in `block (2 levels) in prepare' activesupport (3.2.3) lib/active_support/callbacks.rb:403:in `_run__2492706777632263523__create__3276423133299307975__callbacks' activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback' activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_create_callbacks' activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks' mongoid (3.0.0.rc) lib/mongoid/callbacks.rb:95:in `run_callbacks' mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:24:in `block in prepare' activesupport (3.2.3) lib/active_support/callbacks.rb:403:in `_run__2492706777632263523__save__3276423133299307975__callbacks' activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback' activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_save_callbacks' activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks' mongoid (3.0.0.rc) lib/mongoid/callbacks.rb:95:in `run_callbacks' mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:23:in `prepare' mongoid (3.0.0.rc) lib/mongoid/persistence/operations/insert.rb:26:in `persist' mongoid (3.0.0.rc) lib/mongoid/persistence.rb:49:in `insert' mongoid (3.0.0.rc) lib/mongoid/persistence.rb:188:in `upsert' app/controllers/urls_controller.rb:46:in `block in create' ``` My assumption is that my mongoid.yml file is incorrect but I'm not sure how to get this to work. Any thoughts?