这个问题是 Heroku 和 Django 特有的。
当我使用命令“python manage.py runserver”启动我的应用程序时,网络服务器启动时没有错误。然后我可以在浏览器中检索我访问的 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()
提前感谢您的帮助
最佳答案
由于 dj_database_url
仅安装在您的虚拟环境中,因此请确保在运行 foreman
时该环境已激活;否则你会看到异常。
如果你在 Heroku 上部署它,你不会有这个问题,因为默认情况下 Heroku 将从你的 requirements.txt
文件安装,因此你的环境将有 dj_database_url
一切都会按预期工作。
我还看到您使用的是 Python 3.4 版——除非您有非常特殊的需求,否则请尝试使用 Python 2.7x,因为一些库仍在移植到 Python 3。您稍后可能会遇到无法解释的错误,这是由于版本不兼容。
关于python - manage.py 有效,但工头开始出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25966900/