这个问题是Heroku和django具体的。
当我使用命令" python manage.py runserver"启动我的应用程序时,Web服务器启动时没有错误。然后,我可以在我的浏览器中访问我的访问localhost:8000的主页。大。
当我使用命令" foreman start"启动我的应用程序时,网络服务器也会启动而不会出错。它读取
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未正确导入。奇怪的。 "导入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()
提前感谢您的任何帮助
答案 0 :(得分:2)
由于dj_database_url
仅安装在您的虚拟环境中,因此请确保在运行foreman
时环境已激活;否则你会看到异常。
如果您要在Heroku上部署它,则不会出现此问题,因为默认情况下Heroku将从您的requirements.txt
文件安装,因此您的环境将具有dj_database_url
,一切都将按预期工作。
我也看到你正在使用Python 3.4版 - 除非你有非常特殊的需要,尝试使用Python 2.7x,因为一些库仍然被移植到Python 3.你可能会遇到无法解释的错误,这些错误是由于版本不兼容。