Ошибка компиляции Dokku — django.core.exceptions.ImproperlyConfigured: ошибка при загрузке модуля psycopg2: нет модуля с именем «psycopg2»

Я пытался настроить свой встроенный экземпляр Django в качестве сервера базы данных. Я выбрал DigitalOcean в качестве своей платформы и прочитал, что Dokku — это полезная система PaaS, которая обеспечит лучшую масштабируемость для этого API, который я пытаюсь развернуть.

Я занимался этой проблемой последние 3-4 дня подряд и действительно перебрал все потенциальные средства решения, которые я мог найти в Интернете.

Будучи скорее фронтенд-разработчиком, я довольно плохо разбираюсь в этом вопросе установки бэкенда.

Сначала я подумал, что Dokku — это своего рода функция Git-push, когда я буду отправлять из localhost -> Dokku -> Git -> Deploy.

Копнув глубже, я настроил общедоступные и закрытые ключи для Dokku, чтобы авторизовать отправку Git на Github.

В конце концов, после того, как я, наконец, отказался от этого маршрута, я понял, что ошибался, и примерно так Dokku должен работать: localhost -> Git push -> Dokku -> Deploy.

Был на этом в течение последних 15-18 часов разработки. Поток, казалось, работал, когда мне не нужно было много устанавливать на дроплете DigitalOcean.

Однако самая большая проблема, с которой я сталкиваюсь, связана с этим


Моя текущая установка такова:

  • Дроплет DigitalOcean Dokku в один клик ВЕРСИЯ 0.14.6
  • ОС Убунту 18.04

Я добавил все предложенные файлы, которые я нашел в онлайн-блогах и форумах, в корневую папку:


requirements.txt
---
absl-py==0.4.0
astor==0.7.1
backports.weakref==1.0.post1
dj-database-url==0.5.0
Django==1.11.20
django-cors-headers==3.0.0
django-filter==2.0.0
djangorestframework==3.9.4
enum34==1.1.6
funcsigs==1.0.2
futures==3.2.0
gast==0.2.0
GDAL==2.4.1
grpcio==1.14.1
h5py==2.8.0
Keras==2.2.2
Keras-Applications==1.0.4
Keras-Preprocessing==1.0.2
Markdown==2.6.11
mock==2.0.0
nose==1.3.7
numpy==1.16.3
pbr==4.2.0
Pillow==6.0.0
protobuf==3.6.1
psycopg2==2.8.2
pytz==2019.1
PyYAML==3.13
scipy==1.1.0
six==1.11.0
sqlparse==0.3.0
tensorboard==1.10.0
tensorflow==1.10.1
termcolor==1.1.0
Theano==1.0.2
virtualenv==16.5.0
Werkzeug==0.14.1
whitenoise==4.1.2


---
runtime.txt
---
<code>python-3.6.8</code>



app.json
---
{
    "scripts": {
      "dokku": {
        "postdeploy": "./manage.py migrate"
      }
    }
  }



---
Procfile
---
web: gunicorn core.wsgi — log-file -



---
settings.py
---
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'dbuser',
        'PASSWORD': 'dbpassword',
        'HOST': 'localhost',
        'PORT': '5432',
    },
    'original': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }

}

Я ожидал, что после ввода «git push dokku master» компиляция даст мне URL-адрес развертывания, который я могу просмотреть и запустить сервер Django.

Однако то, с чем я столкнулся, было:



Enumerating objects: 8664, done.
Counting objects: 100% (8664/8664), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5363/5363), done.
Writing objects: 100% (8664/8664), 17.23 MiB | 3.67 MiB/s, done.
Total 8664 (delta 2186), reused 8568 (delta 2157)
remote: Resolving deltas: 100% (2186/2186), done.
-----> Cleaning up...
-----> Building apihirebred from herokuish...
-----> Adding BUILD_ENV to build environment...
-----> Python app detected
-----> Installing python-3.6.8
-----> Installing pip
-----> Installing dependencies with Pipenv 2018.5.18…
       Installing dependencies from Pipfile…
-----> Noticed GDAL. Bootstrapping gdal.
-----> $ python manage.py collectstatic --noinput
       Traceback (most recent call last):
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 20, in <module>
       import psycopg2 as Database
       ModuleNotFoundError: No module named 'psycopg2'
       During handling of the above exception, another exception occurred:
       Traceback (most recent call last):
       File "manage.py", line 22, in <module>
       execute_from_command_line(sys.argv)
       File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
       utility.execute()
       File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
       django.setup()
       File "/app/.heroku/python/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
       apps.populate(settings.INSTALLED_APPS)
       File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
       app_config.import_models()
       File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
       self.models_module = import_module(models_module_name)
       File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
       return _bootstrap._gcd_import(name[level:], package, level)
       File "<frozen importlib._bootstrap>", line 994, in _gcd_import
       File "<frozen importlib._bootstrap>", line 971, in _find_and_load
       File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
       File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
       File "<frozen importlib._bootstrap_external>", line 678, in exec_module
       File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
       File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
       from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
       File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
       class AbstractBaseUser(models.Model):
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py", line 117, in __new__
       new_class.add_to_class('_meta', Options(meta, app_label))
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py", line 321, in add_to_class
       value.contribute_to_class(cls, name)
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/options.py", line 204, in contribute_to_class
       self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
       return getattr(connections[DEFAULT_DB_ALIAS], item)
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 201, in __getitem__
       backend = load_backend(db['ENGINE'])
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
       return import_module('%s.base' % backend_name)
       File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
       return _bootstrap._gcd_import(name[level:], package, level)
       File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 24, in <module>
       raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
       django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'

       !     Error while running '$ python manage.py collectstatic --noinput'.
       See traceback above for details.

       You may need to update application code to resolve this error.
       Or, you can disable collectstatic for this application:

       $ heroku config:set DISABLE_COLLECTSTATIC=1

       https://devcenter.heroku.com/articles/django-assets



Более конкретно:

Ошибка "django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'", которая не исчезала независимо от того, как я пытался устранить ошибку.
: :
! [удаленный отказ] master -> master (перехват предварительного получения отклонен) ошибка: не удалось отправить некоторые ссылки на «dokku@server»


Как бы я ни пытался установить Dokku и свой локальный хост для «psycopg2», мне не удалось устранить ошибку.

Я искренне надеюсь, что кто-то может помочь мне с вышеизложенным, поскольку я не эксперт в этом вопросе с Dokku или в том, как он действительно компилирует пакет и почему компилятор не может получить «psycopg2» для развертывания.

Я также надеюсь, что это не будет единственной проблемой в будущем.

Надеюсь услышать ваш профессиональный совет. Спасибо!


person sgrobert    schedule 12.05.2019    source источник


Ответы (1)


попробуйте эту команду докера, чтобы установить адаптер psycopg2

docker-compose exec web pipenv install psycopg2-binary==2.8.3

вы также можете указать свою конкретную версию, если хотите.

если вы все еще получаете сообщение об ошибке, это означает, что контейнер не остановлен должным образом. Используйте команду ниже, чтобы остановить его

docker-compose down

а затем запустите его после установки psycopg2

docker-compose up 
person Yash Marmat    schedule 19.04.2020