我是Heroku的新手,正尝试使用多个设置文件来设置Django项目。当我在Heroku上运行/打开我的Django应用程序时,出现“ ModuleNotFoundError:没有名为'mysite.settings'的模块。发现的是我没有'mysite.settings'文件...只是一个目录。 / p>
在Visual Studio中本地运行项目效果很好,当我通过Powershell在Heroku上运行不带任何参数的运行服务器时,它也运行良好,包括查找正确的设置文件。当我尝试使用“ heroku open”打开它时,它就会炸弹爆炸。
我的目录结构如下:
-mysite (main project sub-folder)
|
+- settings
|
+----- __init__
+----- base
+----- development (not imported to production site)
+----- production
|
+- __init__
+- forms
+- models
+- urls
+- views
过去两天来,我一直在各种职位上寻找东西,但似乎没有任何效果。无论我尝试了什么,我收到的错误消息都是指“ mysite.settings”模块,该模块未在任何地方加载。我只加载“ mysite.settings.production”。错误是指目录而不是文件吗?
我尝试过的事情的清单:
我已将DJANGO_SETTINGS_MODULE环境变量设置为“ mysite.settings.production”。
heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings.production
我已尝试按照一份heroku票证中的建议将PYTHONPATH env变量设置为falsepath。
heroku config:set PYTHONPATH=fakepath
我尝试使用初始化文件来加载设置。
import os
if os.environ.get('DJANGO_SETTINGS_MODULE', '') == 'mysite.settings.production'
from .production import *
else:
from .development import *
我已经将manage.py和wsgi文件都更改为使用“ mysite.settings.production”
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.production")
我尝试在WSGI文件中设置系统路径。
path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
if path not in sys.path:
sys.path.append(path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.production")
其他说明:
对于Heroku,我已将wsgi文件重命名为prod_wsgi,并且回溯看起来像是在相应地运行它。
在settings.production中,由于重命名了wsgi文件,因此我的WSGI_APPLICATION设置为“ prod_wsgi.application”。
我已经安装了django_heroku,并将其导入我的settings.production的顶部,并将本地设置初始化作为文件的最后一行。
import django_heroku #(at top)
django_heroku.settings(locals()) #(last line)
引用日志
2019-02-19T10:40:22.181193+00:00 app[web.1]: [2019-02-19 10:40:22 +0000] [12] [ERROR] Exception in worker process
2019-02-19T10:40:22.181241+00:00 app[web.1]: Traceback (most recent call last):
2019-02-19T10:40:22.181243+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2019-02-19T10:40:22.181245+00:00 app[web.1]: worker.init_process()
2019-02-19T10:40:22.181247+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
2019-02-19T10:40:22.181249+00:00 app[web.1]: self.load_wsgi()
2019-02-19T10:40:22.181251+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
2019-02-19T10:40:22.181253+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2019-02-19T10:40:22.181255+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2019-02-19T10:40:22.181257+00:00 app[web.1]: self.callable = self.load()
2019-02-19T10:40:22.181259+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2019-02-19T10:40:22.181260+00:00 app[web.1]: return self.load_wsgiapp()
2019-02-19T10:40:22.181262+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2019-02-19T10:40:22.181264+00:00 app[web.1]: return util.import_app(self.app_uri)
2019-02-19T10:40:22.181266+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
2019-02-19T10:40:22.181268+00:00 app[web.1]: __import__(module)
2019-02-19T10:40:22.181270+00:00 app[web.1]: File
"/app/mysite/prod_wsgi.py", line 29, in <module>
2019-02-19T10:40:22.181272+00:00 app[web.1]: application = get_wsgi_application()
2019-02-19T10:40:22.181273+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
2019-02-19T10:40:22.181275+00:00 app[web.1]: django.setup(set_prefix=False)
2019-02-19T10:40:22.181277+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/django/__init__.py", line 19, in setup
2019-02-19T10:40:22.181279+00:00 app[web.1]: configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
2019-02-19T10:40:22.181281+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 57, in __getattr__
2019-02-19T10:40:22.181283+00:00 app[web.1]: self._setup(name)
2019-02-19T10:40:22.181285+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 44, in _setup
2019-02-19T10:40:22.181287+00:00 app[web.1]: self._wrapped = Settings(settings_module)
2019-02-19T10:40:22.181288+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 107, in __init__
2019-02-19T10:40:22.181290+00:00 app[web.1]: mod = importlib.import_module(self.SETTINGS_MODULE)
2019-02-19T10:40:22.181292+00:00 app[web.1]: File
"/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2019-02-19T10:40:22.181294+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2019-02-19T10:40:22.181315+00:00 app[web.1]: ModuleNotFoundError: No module named 'mysite.settings'
感谢您的帮助。
更新(02/21/19): 在50多位Git致力于解决此问题之后,我放弃了并删除了我的Heroku帐户。我在Procfile中的gunicorn语句中添加了一些其他调试选项,但没有任何帮助。 Pythonpath显示为“ None”,无论我在WSGI文件中使用sys.path还是在服务器设置中使用环境变量,我都无法设置它。