Heroku发布时Django模块未找到错误

0 投票
1 回答
29 浏览
提问于 2025-04-14 17:13

我遇到的问题和之前很多人说的类似,但在我这儿还是没解决。当我把Django项目部署到Heroku上时,出现了一个ModuleNotFoundError的错误,而在本地运行时一切正常。我使用的是Django 4.0Python 3.10.13

Heroku的发布日志:

Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/base.py", line 413, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/base.py", line 454, in execute
    self.check()
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/base.py", line 486, in check
    all_issues = checks.run_checks(
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/checks/compatibility/django_4_0.py", line 9, in check_csrf_trusted_origins
    for origin in settings.CSRF_TRUSTED_ORIGINS:
  File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 89, in __getattr__
    self._setup(name)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 76, in _setup
    self._wrapped = Settings(settings_module)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 190, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/app/.heroku/python/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'opportunities.settings.heroku_staging'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/app/manage.py", line 22, in <module>
    main()
  File "/app/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/base.py", line 426, in run_from_argv
    connections.close_all()
  File "/app/.heroku/python/lib/python3.10/site-packages/django/utils/connection.py", line 84, in close_all
    for conn in self.all(initialized_only=True):
  File "/app/.heroku/python/lib/python3.10/site-packages/django/utils/connection.py", line 76, in all
    return [
  File "/app/.heroku/python/lib/python3.10/site-packages/django/utils/connection.py", line 73, in __iter__
    return iter(self.settings)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/utils/connection.py", line 45, in settings
    self._settings = self.configure_settings(self._settings)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/db/utils.py", line 148, in configure_settings
    databases = super().configure_settings(databases)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/utils/connection.py", line 50, in configure_settings
    settings = getattr(django_settings, self.settings_name)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 89, in __getattr__
    self._setup(name)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 76, in _setup
    self._wrapped = Settings(settings_module)
  File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 190, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/app/.heroku/python/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'opportunities.settings.heroku_staging'

目前我的项目结构如下: 在这里输入图片描述

在Heroku上,我把DJANGO_SETTINGS_MODULE设置为opportunities.settings.heroku_staging。根据这个项目结构,这应该没问题,但我还是遇到了这个错误。

1 个回答

0

看起来你是在一个叫 app 的模块里部署你的项目,而不是在 opportunities 模块里,这从错误信息中的文件路径可以看出来(比如 File "/app/manage.py", line 22, in <module>)。

你可以:

  1. 把你的配置改成在 opportunities 模块里部署,而不是 app。具体怎么改要看你是怎么进行部署的。

  2. 或者把 DJANGO_SETTINGS_MODULE 设置成 app.settings.heroku_staging

撰写回答