Я развертываю приложение Django в Heroku. Это приложение работает локально и было построено как структурный клон django-vue-template . Единственные заметные изменения:
- У меня есть больше приложений в моем проекте.
- Я не использую пакет настроек с модулями prod / dev, только один модуль.
Структура файла:
![](https://i.stack.imgur.com/tmJg8.png)
Ошибка, которую я получаю в журнале сборки, вызывает ошибку ImportEr 'users', но это не приложение, это приложение, которое является первым приложением Django в моем INSTALLED_APPS
.
-----> $ python manage.py collectstatic --noinput
PYTHONPATH: .
BASE_DIR /tmp/build_1803d0c0cef716d3bc64a04ddb7b7ea0/backend
Traceback (most recent call last):
File "manage.py", line 15, 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 89, in populate
app_config = AppConfig.create(entry)
File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
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 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'users'
! 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
! Push rejected, failed to compile Python app.
! Push failed
Вот мой INSTALLED_APPS
в settings.py для справки.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'users',
'channels',
'socials',
]
Я не получаю эту ошибку локально, даже при запуске python manage.py collectstatic
, поэтому я чувствую, что это связано с моим PYTHONPATH
на Heroku, но я сравнил с развертыванием неизмененного django-vue-шаблон & PYTHONPATH
выглядит одинаково.
Что я могу сделать вывод:
- settings.py достигается
- INSTALLED_APPS в порядкедо фактических приложений Django
- Это не похоже на прямую структурную ошибку, поскольку не влияет локально, только при подаче
wsgi.py
Если есть дополнительная информация, которую стоит поделиться для отладки помощи, пожалуйста, оставьте комментарий, и я добавлю его!
Обновление: я понял, что был немного вложенным, что Heroku не понравилось. backend
был просто каталогом, а не пакетом, поэтому я добавил __init__.py
, что выявило большую проблему с вложением таким способом. Я изменил свою структуру, чтобы улучшить зеркальную структуру backend
в django-vue-template , поэтому моя новая структура выглядит следующим образом, что опять-таки работает локально, но завершается неудачей с ImportError на users
при развертывании в Heroku.
![enter image description here](https://i.stack.imgur.com/3JELM.png)