[英]Django fails to connect to remote MongoDB server using djongo
我嘗試連接以將 MongoDB 數據庫用於 Django 項目。
所以我按照教程從 settings.py 更改數據庫
# Original
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'testDB',
}
變成
# From tutorials
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'testDB',
'USERNAME': 'username',
'PASSWORD': 'password',
'HOST': 'myhostname.example',
'PORT': '27017',
}
}
試圖運行
python manage.py makemigrations
python manage.py migrate
一切正常,但我的數據庫中沒有數據
顯然 django 去了 localhost:27017 主機並在那里創建了一個數據庫。
卸載MongoDB,只是導致makemigrations失敗
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it
我找到了解決方案。 https://stackoverflow.com/a/60244703/7637454
為了完成這里的答案,這就是您現在應該如何配置它。
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'yourmongodb',
'CLIENT': {
'host': 'some-host.or.ip',
'port': 27017,
'username': 'youruser',
'password': 'yourdbpass',
'authSource': 'yourcollection', # usually admin
}
},
}
提供的答案對我不起作用,而是我采用了以下方法。
所以,在幕后, Djongo使用PyMongo ,PyMongo 的默認配置是:
class MongoClient(common.BaseObject):
HOST = "localhost" # here HOST has the hardcoded value
PORT = 27017
它們在以下文件中:
venv/lib/python3.6/site-packages/pymongo/mongo_client.py
將HOST
的硬編碼值替換為類似
HOST = 'mongodb+srv://<username>:<password>@cluster-name/<dbname>?retryWrites=true&w=majority'
此外,我們可以根據需要設置環境變量
HOST = os.getenv('MONGO_DB_URL')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.