2

基本上我有一个 mongodb 实例在 ec2 上运行和工作。另一方面,我有一个使用 mongoid 作为 orm 在本地工作的 rails 3.2 应用程序。我接下来要做的是尝试使用 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

从这里开始,我认为我对这一切将如何运作没有一个清晰的认识。但我做了一些试验和错误。首先,我想尝试连接到开发中的 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>

我将用户名和密码注释掉,部分原因是我不确定该放什么,部分原因是当我检查 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'
....

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

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

感谢这里任何人的任何建议。

4

2 回答 2

9

好的,终于找到问题了。在 mongodb.conf 文件中,有一个设置叫做

bind_ip = 127.0.0.1

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

bind_ip = 0.0.0.0

它有效。不过谢谢各位的建议。

于 2012-05-19T06:19:41.360 回答
0

这很可能是防火墙问题。检查您的 ec2 实例的安全组是否打开了默认的 mongodb 端口 27017。

如果您以前没有做过类似的事情,这篇文章将为您提供它是如何工作的要点:

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

于 2012-05-18T21:23:55.797 回答