基本上我有一个在 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
从这里开始,我认为我不清楚这一切将如何运作。但我做了一些试验和错误。首先,我想在开发时尝试连接到 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 但只是想确认一下)
我一直在查看文档和教程列表:
- http://mongoid.org/docs/installation/configuration.html
- http://www.mongodb.org/display/DOCS/Security+and+Authentication#SecurityandAuthentication-AbouttheKeyFile
- MongoDB and Mongoid in production - 看起来像我要找的东西,但不确定,要去试试。
- http://craiccomputing.blogspot.com/2011/02/authentication-in-mongo-and-mongoid.html
感谢这里任何人的任何建议。
最佳答案
好的终于找到问题了。在 mongodb.conf 文件中,有一个名为
的设置bind_ip = 127.0.0.1
我瞎了没有注意到这一点,这意味着服务器只能在本地访问而不能从外部访问,因此出现连接失败错误。快速解决方法是将其更改为
bind_ip = 0.0.0.0
并且有效。但是谢谢大家的建议。
关于ruby-on-rails - 尝试使用 mongoid 作为 orm in rails 连接到 ec2 上的 mongodb 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643727/