John Lee
John Lee

Reputation: 1251

Trying to connect to a mongodb instance on ec2 with mongoid as orm in rails

basically I have a mongodb instance running and working on ec2. On the side I have a rails 3.2 app with mongoid as orm working on local. What I want to do next is try to connect my rails app to the mongodb instance using mongoid. Also, intending to host my rails app on Dotcloud later

Ran the code rails g mongoid:config to generate the mongoid.yml file with the following code:

development:
 host: localhost
 database: mongotest_development

test:
 host: localhost
 database: mongotest_test

set these environment variables on your prod server
production:
 host: <%= ENV['MONGOID_HOST'] %>
 port: <%= ENV['MONGOID_PORT'] %>
 username: <%= ENV['MONGOID_USERNAME'] %>
 password: <%= ENV['MONGOID_PASSWORD'] %>
 database: <%= ENV['MONGOID_DATABASE'] %>
 # slaves:
 #   - host: slave1.local
 #     port: 27018
 #   - host: slave2.local
 #     port: 27019

From here onwards, I don't think I have a clear picture of how all this is going to work. But I did some trial and error. Firstly I wanted to try connecting to the mongodb instance on development, so I commented out the mongoid.yml defaults and added the following:

development:
 host: <public dns of the mongodb instance>
 port: 27017
 # username: 
 # password: 
 database: <I ssh into the instance and created a database>

I commented the username and password out partly because I am not sure what to put, and partly because when I inspect the mongod.conf file on ec2, I saw that by default :auth is false, so I assume authentication is not required. So I ran rails console and got the following error:

Failed to connect to a master node at <public dns of the mongodb instance>:27017 (Mongo::ConnectionFailure)
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongo-1.6.2/lib/mongo/connection.rb:589:in `setup'
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongo-1.6.2/lib/mongo/connection.rb:114:in `initialize'
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongo-1.6.2/lib/mongo/connection.rb:165:in `new'
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongo-1.6.2/lib/mongo/connection.rb:165:in `from_uri'
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongoid-2.4.10/lib/mongoid/config/database.rb:86:in `master'
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongoid-2.4.10/lib/mongoid/config/database.rb:19:in `configure'
from /Users/Kinglee/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/mongoid-2.4.10/lib/mongoid/config.rb:290:in `configure_databases'
....

At this point, I am kind of confused. I kept asking myself, do I need the username and password to connect to mongodb ? I kind of 80% sure that I need them but I am not sure where to find them or rather not sure what am I connecting to, the mongodb ec2 instance or the mongodb database. How should I go about doing that ? Should I open port 27017 and 28017 on the instance ? Do I need to add config to database.yml (I highly doubt I need to since there is already mongoid.yml but just want to confirm)

I have been looking at a list of documentation and tutorial:

Appreciate any advice from anyone here.

Upvotes: 2

Views: 3312

Answers (2)

John Lee
John Lee

Reputation: 1251

Ok finally found the problem. In the mongodb.conf file, there is a setting which called

bind_ip = 127.0.0.1

I was blind to not notice this, it means that the server can only be access locally and not externally, hence the fail connection error. A quick fix would be to change it to

bind_ip = 0.0.0.0

and it works. But thanks for the advice guys.

Upvotes: 9

Tyler Brock
Tyler Brock

Reputation: 30136

It is most likely a firewall issue. Check to see if the security group for your ec2 instance has the default mongodb port 27017 open.

This article will give you the gist of how it works if you haven't done something like that before:

http://cloud-computing.learningtree.com/2010/09/24/understanding-amazon-ec2-security-groups-and-firewalls/

Upvotes: 0

Related Questions