Django - MongoDB: (не удалось подключиться к localhost: 27017) Отказано в соединении - PullRequest
0 голосов
/ 01 марта 2012

У меня проблемы с работой mongodb с Django, моя установка - Mac OS X 10.7. Я следовал учебному пособию, доступному здесь: http://django -mongodb.org / themes / setup.html . Я пробовал как с virtualenv, так и без него (я впервые устанавливаю django, поэтому у меня не должно быть никаких конфликтов).

В settings.py

DATABASES = {
   'default' : {
      'ENGINE' : 'django_mongodb_engine',
      'NAME' : 'my_database'
   }
}

In firstapp.models.py

from django.db import models
from djangotoolbox.fields import ListField

class Post(models.Model):
    title = models.CharField()
    text = models.TextField()
    tags = ListField()
    comments = ListField()

В моей оболочке (оболочка python manage.py) я пытаюсь запустить:

from mydjango.firstapp.models import Post
post = Post.objects.create();

Но я продолжаю получать следующее: DatabaseError: не удалось подключиться к localhost: 27017: [Errno 61] Соединение отклонено ( полная трассировка )

Если я переключаю settings.py на следующее:

DATABASES = {  
    'default': {  
        'ENGINE': 'django_mongodb_engine',  
        'NAME': 'my_database',  
        'USER': '',  
        'PASSWORD': '',  
        'HOST': 'localhost',  
        'PORT': '27017',  
        'SUPPORTS_TRANSACTIONS': False,  
    },  
} 

Я получаю эту ошибку в оболочке: ImproperlyConfigured: порт должен быть экземпляром int

Ответы [ 4 ]

3 голосов
/ 01 марта 2012

Вы установили MongoDB отдельно?Похоже, что ссылка, по которой вы ссылаетесь, не затрагивает конфигурацию MongoDB.Предполагается, что база данных уже запущена.В любом случае MongoDB отключается или, по крайней мере, слушает где-то еще.

Последняя ошибка ("... instance of int") только потому, что вы указали '27017' (строку) вместо 27017 в словаре конфигурации.Но даже тогда это должно быть эквивалентно первой, более простой конфигурации.

0 голосов
/ 03 января 2018

По вашему вопросу кажется, что вы пытаетесь использовать Django с Mongodb.В каком случае вам нужен Mongoengine?

В официальной документации Mongodb говорится о djongo .Он работает путем перевода запросов SQL в документы запросов.

Вам не нужен Mongoengine для его запуска.

Все собственные модули вклада Django (например, admin, user, session) работают без каких-либо изменений.

MongoEngine требует переписывания модулей Django, и в последний раз, когда я проверял, собственный модуль администратора не работал на MongoEngine.

Ваши существующие модели также работают без перевода ORM.

0 голосов
/ 29 декабря 2017

Если вы создаете модели в models.py, то ниже приведен пример

models.py

from mongoengine import *

class UserLocation(Document):

    message = StringField(required=True, max_length=200)

Вам не нужен sqlite3, если вы его не используете, и толькоmongodb, тогда у вас есть возможность прокомментировать это

settings.py

# DATABASES = {
#             'default': {
#                     'ENGINE': 'django.db.backends.sqlite3',
#                     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#                 }
#             }

Теперь в

views.py

from .models import UserLocation

def save_function(request):

    msg = "shinto"

    # saving the data to the database
    data = UserLocation(message = msg)
    data.save()

    # reading the data
    read_data = json.loads(UserLocation.objects().to_json())

    print read_data

Существует такжедругой метод, и он очень прост (вам не нужно создавать модели в models.py)

views.py

from pymongo import MongoClient

client = MongoClient(port=27017)

db = client.testing_db # use a database called testing_db
collection = db.files # inside that db a collection called files

def a_new_function():


    fooman = {"name" : "shinto", "age" : 25}
    collection.insert(fooman)

    # if you need to display only the name "shinto
    #cursor = collection.find({"name" : "shinto"})

    # if you need to display all then empty
    cursor = collection.find({})

    for document in cursor:
        print(document)

не удалось подключиться к localhost: 27017 Отказано в соединении или вы видите111 потому что вы не установили или не открыли mongodb в другом терминале

Для установки в Ubuntu выполните следующее

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

, если Ubuntu 12.04 (устарело), ​​то в терминале

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

если Ubuntu 14.04, то в терминале

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

если Ubuntu 16.04, затем в терминале

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

После выполнения

sudo apt-get update
sudo apt-get install -y mongodb-org

После установки, затем запуститьmongodb

sudo service mongod start

Для остановки mongodb do

sudo service mongod stop

Для перезапуска mongodb

sudo service mongod restart

Наконец, вы можете использовать

mongo --host 127.0.0.1:27017

, который решит проблему

Спасибо

0 голосов
/ 23 апреля 2014

В случае, если MongoDB работает, но вы все еще получаете эту ошибку при попытке подключения с другого компьютера, это может быть связано с тем, что на сервере MongoDB запущен межсетевой экран.
Я столкнулся с той же самой ошибкой на CentOS 6.5 под управлением MongoDB 2.6.0. Отключение брандмауэра на машине решило проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...