尝试连接到ec2上的mongodb实例,mongoid作为轨道中的orm

Joh*_*Lee 2 ruby-on-rails amazon-ec2 mongodb mongoid

基本上我有一个运行和工作ec2的mongodb实例.在侧面我有一个rails 3.2应用程序与mongoid作为orm在本地工作.我接下来要做的是尝试使用mongoid将我的rails应用程序连接到mongodb实例.此外,打算稍后在Dotcloud上托管我的rails应用程序

rails g mongoid:config使用以下代码运行代码以生成mongoid.yml文件:

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
Run Code Online (Sandbox Code Playgroud)

从现在开始,我认为我不清楚这一切是如何发挥作用的.但我做了一些试验和错误.首先我想尝试在开发时连接到mongodb实例,所以我注释掉了mongoid.yml默认值并添加了以下内容:

development:
 host: <public dns of the mongodb instance>
 port: 27017
 # username: 
 # password: 
 database: <I ssh into the instance and created a database>
Run Code Online (Sandbox Code Playgroud)

我对用户名和密码进行了评论,部分是因为我不知道要放什么,部分是因为当我检查ec2上的mongod.conf文件时,我默认看到:auth为false,所以我假设不需要身份验证.所以我跑了rails console并得到以下错误:

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'
....
Run Code Online (Sandbox Code Playgroud)

此时,我有点困惑.我一直在问自己,我需要用户名和密码才能连接到mongodb吗?我有80%肯定我需要它们但我不知道在哪里找到它们或者不确定我连接到什么,mongodb ec2实例或mongodb数据库.我应该怎么做呢?我应该在实例上打开端口27017和28017吗?我是否需要将配置添加到database.yml(我非常怀疑我需要,因为已经有mongoid.yml但只是想确认)

我一直在查看文档和教程列表:

感谢任何人的建议.

Joh*_*Lee 9

好吧终于找到了问题.在mongodb.conf文件中,有一个调用的设置

bind_ip = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我没有注意到这一点,这意味着服务器只能在本地而不是外部访问,因此失败连接错误.快速解决方法是将其更改为

bind_ip = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

它的工作原理.但感谢你们的建议.