我正在try 配置我的Django项目以部署到Heroku.我收到以下错误,但我真的不知道如何修复它.

以下是full traceback和错误:

22:46:15 web.1  | Traceback (most recent call last):
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
22:46:15 web.1  |     worker.init_process()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
22:46:15 web.1  |     self.wsgi = self.app.wsgi()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
22:46:15 web.1  |     self.callable = self.load()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
22:46:15 web.1  |     return self.load_wsgiapp()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
22:46:15 web.1  |     return util.import_app(self.app_uri)
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
22:46:15 web.1  |     __import__(module)
22:46:15 web.1  |   File "/Users/nir/nirla/nirla/wsgi.py", line 12, in <module>
22:46:15 web.1  |     from dj_static import Cling
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/dj_static.py", line 7, in <module>
22:46:15 web.1  |     from django.contrib.staticfiles.handlers import StaticFilesHandler as DebugHandler
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 8, in <module>
22:46:15 web.1  |     from django.contrib.staticfiles.views import serve
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/contrib/staticfiles/views.py", line 13, in <module>
22:46:15 web.1  |     from django.views import static
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/views/static.py", line 96, in <module>
22:46:15 web.1  |     template_translatable = ugettext_noop("Index of %(directory)s")
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 65, in gettext_noop
22:46:15 web.1  |     return _trans.gettext_noop(message)
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 52, in __getattr__
22:46:15 web.1  |     if settings.USE_I18N:
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 54, in __getattr__
22:46:15 web.1  |     self._setup(name)
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 47, in _setup
22:46:15 web.1  |     % (desc, ENVIRONMENT_VARIABLE))
22:46:15 web.1  | ImproperlyConfigured: Requested setting USE_I18N, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

这是我的wsgi.py号文件:

import os
from django.core.wsgi import get_wsgi_application
from dj_static import Cling

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings") #nirla is the name of the project


application = Cling(get_wsgi_application())

如果相关的话,我的manage.py号档案:

import os
import sys

    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings")
    
        from django.core.management import execute_from_command_line
    
        execute_from_command_line(sys.argv)

有人能理解这里的问题吗?如果是这样的话,你能解释一下是怎么回事吗?

推荐答案

我认为DJANGO_SETTINGS_MODULE必须以某种方式设置,所以我查看了documentation(链接更新),发现:

export DJANGO_SETTINGS_MODULE=mysite.settings

虽然如果您在Heroku上运行服务器,这是不够的,但是您还需要在那里指定它.如下所示:

heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings --account <your account name> 

在我的具体 case 中,我运行了这两个,一切都解决了:

export DJANGO_SETTINGS_MODULE=nirla.settings
heroku config:set DJANGO_SETTINGS_MODULE=nirla.settings --account personal

Edit

我还想指出,每次关闭或重新启动虚拟环境时,都必须重新执行此操作.相反,您应该通过转到venv/bin/activate并在代码底部添加行:set DJANGO_SETTINGS_MODULE=mysite.settings来自动执行该过程.从现在起,每次激活虚拟环境时,都将使用该应用的设置.

Django相关问答推荐

Django BooleanField如何使用RadioSelect?

Django没有';t显示黄页

try 在 django 中发送验证邮箱,出现错误

如何根据状态计算表中数据的数量?

防止 Django 从表单集中保存特定表单

如何将数据库中的 None 序列化为空对象?

Django 应用程序似乎无法识别相关名称?

django - 表单没有错误,但 form.is_valid() 没有验证

Django ORM 和锁定表

所有子元素的Django自递归外键过滤器查询

相关字段查找无效:​​icontains

使用 XMLHttpRequest 提示下载文件

测试 Django 信号的正确方法

获取 Django 表单中的错误列表

django post_save 更新信号

在 Django 开发服务器中关闭静态文件的缓存

如何在 Python 中运行另一个脚本而不等待它完成?

在 django 中获取空查询集的类名

Django 在 css 文件中使用背景图像的方法

Django REST 框架中的每个字段权限