簡體   English   中英

Django 無法使用 djongo 連接到遠程 MongoDB 服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM