2012-05-17 46 views
2

基本上我有一個mongodb實例運行和工作在ec2上。在一邊我有一個rails 3.2應用程序與mongoid作爲orm在本地工作。接下來我要做的就是嘗試使用mongoid將我的rails應用程序連接到mongodb實例。此外,有意主辦Dotcloud我的Rails應用程序後試圖連接到ec2與mongoid作爲orm在軌道上的mongodb實例

冉代碼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/[email protected]/gems/mongo-1.6.2/lib/mongo/connection.rb:589:in `setup' 
from /Users/Kinglee/.rvm/gems/[email protected]/gems/mongo-1.6.2/lib/mongo/connection.rb:114:in `initialize' 
from /Users/Kinglee/.rvm/gems/[email protected]/gems/mongo-1.6.2/lib/mongo/connection.rb:165:in `new' 
from /Users/Kinglee/.rvm/gems/[email protected]/gems/mongo-1.6.2/lib/mongo/connection.rb:165:in `from_uri' 
from /Users/Kinglee/.rvm/gems/[email protected]/gems/mongoid-2.4.10/lib/mongoid/config/database.rb:86:in `master' 
from /Users/Kinglee/.rvm/gems/[email protected]/gems/mongoid-2.4.10/lib/mongoid/config/database.rb:19:in `configure' 
from /Users/Kinglee/.rvm/gems/[email protected]/gems/mongoid-2.4.10/lib/mongoid/config.rb:290:in `configure_databases' 
.... 

在這一點上,我也有點困惑。我一直在問自己,我需要用戶名和密碼來連接到mongodb嗎?我有80%的人確定我需要他們,但我不確定在哪裏找到他們,或者不確定我要連接什麼,mongodb ec2實例或mongodb數據庫。我應該怎麼做呢?我應該在實例上打開端口27017和28017嗎?我是否需要配置增加的database.yml(我很懷疑我需要,因爲已經有mongoid.yml只是想確認)

我一直在看文檔和教程的列表:

任何人欣賞任何意見在這裏。

+1

您是否打開了EC2實例的相關安全組中的端口27017? – jhonkola

+0

是的。我做到了。我還修改了mongodb.conf文件並取消註釋'port = 27017'(最初默認註釋掉)。試圖運行rails控制檯,但仍然有相同的連接失敗錯誤。 –

回答

8

好吧終於發現了問題。在mongodb.conf文件,有一個呼籲

bind_ip = 127.0.0.1 

我是盲人,沒有注意到這個設置,這意味着該服務器只能訪問本地和外部不,因此無法連接錯誤。一個快速解決辦法是將其更改爲

bind_ip = 0.0.0.0 

它的工作原理。但謝謝你們的建議。

+0

很棒的發現!爲我完美工作。 –