python - manage.py 有效,但工头开始出错

标签 python django heroku

这个问题是 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/

相关文章:

带有转义符、引号和定界符的 Python 正则表达式

javascript - 克隆一个 div 并更改克隆 div 的所有元素的 id

ruby-on-rails - 错误 : too many emails per second on Heroku

python - 如何将多个可重复使用的Django应用程序绑定(bind)在一起?

python - 动态限制相关字段的查询集

ruby-on-rails - Heroku/Rails:PG::Undefined 表:错误 "[tablename]"在 heroku rails 迁移中不存在

mysql - 无法在 heroku 上使用 ClearDB 运行 Play Framework 1.2.4 应用程序

python hell 犬 : multipe schemas for a single filed?

javascript - 相同的语句在 for 循环内给出错误

python - django/python 将表示 python 字典的字符串转换为字典对象