Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB won't connect to MongoHQ using Mongoid

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?

like image 441
Nick ONeill Avatar asked Dec 20 '22 21:12

Nick ONeill


1 Answers

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

like image 157
Kishore Yekkanti Avatar answered Jan 04 '23 19:01

Kishore Yekkanti