0

リモート mongodb データベースのコレクションにドキュメントを追加するために実行している Python スクリプトがあります。ファイルは次のとおりです。

from pymongo import Connection
ip    = 'x.x.x.x' #edited out

conn  = Connection()
db    = conn['netmon']

users = db.users
print 'number of users: ' + str(users.count())
if users.count() == 0:
  print 'Please create a new account.'
  t_user = raw_input('Username:')
  users.insert({'username':unicode(t_user)})
conn.close()

このスクリプトを実行すると、興味深い動作が見られます。サーバー ログには、接続が受け入れられ、クエリが実行され、接続が閉じられたように見えます。

# Mongodb logs
14:27:18 [initandlisten] connection accepted from 108.93.46.75:39558 #1
14:27:18 [conn1] run command admin.$cmd { ismaster: 1 }
14:27:18 [conn1] command admin.$cmd command: { ismaster: 1 } ntoreturn:1 reslen:71 0ms
14:27:18 [conn1] run command netmon.$cmd { count: "users", fields: null, query: {} }
14:27:18 [conn1] Accessing: netmon for the first time
14:27:18 [conn1] command netmon.$cmd command: { count: "users", fields: null, query: {} } ntoreturn:1 reslen:58 10ms
14:27:18 [conn1] end connection 108.93.46.75:39558

ただし、これは python スクリプトから取得したものです。

# Python error
> python testmongo.py
Traceback (most recent call last):
  File "testmongo.py", line 7, in <module>
    conn  = Connection()
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.2.1-py2.7-linux-x86_64.egg/pymongo/connection.py", line 290, in __init__
    self.__find_node()
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.2.1-py2.7-linux-x86_64.egg/pymongo/connection.py", line 586, in __find_node
    raise AutoReconnect(', '.join(errors))
pymongo.errors.AutoReconnect: could not connect to localhost:27017: [Errno 111] Connection refused
charles@charles-mbp:~/Desktop$ python testmongo.py
Traceback (most recent call last):
  File "testmongo.py", line 7, in <module>
    conn  = Connection()
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.2.1-py2.7-linux-x86_64.egg/pymongo/connection.py", line 290, in __init__
    self.__find_node()
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.2.1-py2.7-linux-x86_64.egg/pymongo/connection.py", line 586, in __find_node
    raise AutoReconnect(', '.join(errors))
pymongo.errors.AutoReconnect: could not connect to localhost:27017: [Errno 111] Connection refused
charles@charles-mbp:~/Desktop$ python testmongo.py
Traceback (most recent call last):
  File "testmongo.py", line 7, in <module>
    conn  = Connection()
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.2.1-py2.7-linux-x86_64.egg/pymongo/connection.py", line 290, in __init__
    self.__find_node()
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.2.1-py2.7-linux-x86_64.egg/pymongo/connection.py", line 586, in __find_node
    raise AutoReconnect(', '.join(errors))
pymongo.errors.AutoReconnect: could not connect to localhost:27017: [Errno 111] Connection refused

役立つ情報: リモート サーバーは、OpenVZ で実行されている VPS です。count() と反復子に関連する互換性の問題があることは知っていますが、(おそらく) --smallfiles オプションを使用して修正し、nssize を 100 に制限しました。両側のファイアウォールは完全に開いています。

また、エラーで、別の IP アドレスを指定したにもかかわらず、autoreconnect が localhost に接続しようとしていることに気付きました。

4

1 に答える 1

0

IPを渡す必要があります-conn = Connection(ip)

于 2012-07-16T19:55:58.670 に答える