manage.py工作,但工头开始出错



这个问题是Heroku和django特有的。

当我使用命令"python manage.py runserver"启动应用程序时,Web服务器启动时不会出错。然后,我可以在浏览器中检索我访问的localhost:8000的主页。太棒了

当我使用命令"foreman start"启动应用程序时,Web服务器也会正常启动。它读取

00:44:19 web.1  | started with pid 9736
00:44:19 web.1  | 2014-09-22 00:44:19 [9736] [INFO] Starting gunicorn 19.0.0
00:44:19 web.1  | 2014-09-22 00:44:19 [9736] [INFO] Listening at: http://0.0.0.0:5000 (9736)
00:44:19 web.1  | 2014-09-22 00:44:19 [9736] [INFO] Using worker: sync
00:44:19 web.1  | 2014-09-22 00:44:19 [9739] [INFO] Booting worker with pid: 9739

太棒了。当我尝试访问localhost:5000时,出现了问题。页面上写着"内部服务器错误"。我看了看工头生产的堆垛机,下面是我看到的:

00:45:22 web.1  |     respiter = self.wsgi(environ, resp.start_response)
00:45:22 web.1  |   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/handlers/wsgi.py", line 187, in __call__
00:45:22 web.1  |     self.load_middleware()
00:45:22 web.1  |   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/handlers/base.py", line 46, in load_middleware
00:45:22 web.1  |     for middleware_path in settings.MIDDLEWARE_CLASSES:
00:45:22 web.1  |   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/conf/__init__.py", line 54, in __getattr__
00:45:22 web.1  |     self._setup(name)
00:45:22 web.1  |   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/conf/__init__.py", line 49, in _setup
00:45:22 web.1  |     self._wrapped = Settings(settings_module)
00:45:22 web.1  |   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/sitepackages/django/conf/__init__.py", line 132, in __init__
00:45:22 web.1  |     % (self.SETTINGS_MODULE, e)
00:45:22 web.1  | ImportError: Could not import settings 'gettingstarted.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named 'dj_database_url'

dj_database_url未正确导入。奇怪的"Import dj_database_url"出现在我的settings.py文件的顶部。

如果我激活了我的virtualenv并启动python,我就可以运行命令"import dj_database_url"。此外,当我使用manage.py启动服务器时,settings.py会被打开,因此导入也必须正常工作。那么,为什么使用工头会破坏这种导入呢?

这是我的wsgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gettingstarted.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

提前感谢您的帮助

由于dj_database_url仅安装在您的虚拟环境中,请确保在运行foreman时环境已激活;否则,您将看到异常。

如果您将其部署在Heroku上,则不会出现此问题,因为默认情况下,Heroku将从您的requirements.txt文件安装,因此您的环境将具有dj_database_url,并且一切都将按预期工作。

我还看到您使用的是Python 3.4版本——除非您有非常特殊的需求,否则请尝试使用Python 2.7x,因为一些库仍在移植到Python 3。由于版本不兼容,您以后可能会遇到无法解释的错误。

最新更新