2

基本的に、ec2で実行および動作しているmongodbインスタンスがあります。側では、mongoid を orm としてローカルで作業している Rails 3.2 アプリがあります。次にやりたいことは、mongoid を使用して、レール アプリを 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>

ユーザー名とパスワードをコメント アウトした理由の 1 つは、何を入力すればよいかわからないことと、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 を開く必要がありますか? config を database.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 に答える