OpenShift Python mongoDB 环境变量未设置 / 无法连接

1 投票
1 回答
1548 浏览
提问于 2025-04-17 21:27

这是我应用文件的开头部分:

import os
import sys
from cgi import parse_qs, escape
import pymongo
from pymongo import MongoClient

我安装了mongoDB 2.4的环境,并尝试通过以下方式连接:

client = MongoClient('mongodb:$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/')

但是我遇到了这些错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/lib/openshift/531b77fd500446980900010d/python/virtenv/lib/python2.7/site-packages/pymongo/mongo_client.py", line 239, in __init__
    res = uri_parser.parse_uri(entity, port)
  File "/var/lib/openshift/531b77fd500446980900010d/python/virtenv/lib/python2.7/site-packages/pymongo/uri_parser.py", line 269, in parse_uri
    nodes = split_hosts(hosts, default_port=default_port)
  File "/var/lib/openshift/531b77fd500446980900010d/python/virtenv/lib/python2.7/site-packages/pymongo/uri_parser.py", line 209, in split_hosts
    nodes.append(parse_host(entity, port))
  File "/var/lib/openshift/531b77fd500446980900010d/python/virtenv/lib/python2.7/site-packages/pymongo/uri_parser.py", line 137, in parse_host
    raise ConfigurationError("Port number must be an integer.")
pymongo.errors.ConfigurationError: Port number must be an integer.

看起来 OPENSHIFT_MONGODB_DB_PORT 没有设置

print  OPENSHIFT_MONGODB_DB_PORT --> NameError: name 'OPENSHIFT_MONGODB_DB_PORT' is not defined

同样的情况也发生在 OPENSHIFT_MONGODB_DB_HOST

我需要做些什么来建立连接呢?

更新:

我通过直接在客户端输入rockmongo的信息成功连接了

client = MongoClient('mongodb://admin:password@[ip addr]:[port]/') 

但是当我这样做时:

client = MongoClient('mongodb:admin:password@%s:%s/' %  os.environ['OPENSHIFT_MONGODB_DB_HOST'], os.environ['OPENSHIFT_MONGODB_DB_PORT'])) 

我得到了:

[error] (<type 'exceptions.KeyError'>, KeyError('OPENSHIFT_MONGODB_DB_HOST',), <traceback object at 0x7f7bc8367248>)

1 个回答

5

OpenShift的连接变量是以环境变量的形式定义的,不能像普通的Python变量那样直接访问。所以你给出的打印语句是无法工作的,应该用下面的方式;

import os
print os.environ['OPENSHIFT_MONGODB_DB_PORT']

你需要把你的代码改成;

client = MongoClient('mongodb:%s:%s/' % (os.environ['OPENSHIFT_MONGODB_DB_HOST'], os.environ['OPENSHIFT_MONGODB_DB_PORT))

你可以在这里查看一个示例。

撰写回答