Heroku的女服务员发出错误

时间:2014-04-02 19:51:44

标签: django heroku procfile waitress

我正试图从Gunicorn切换到Heroku上的Waitress。在日志中,我不断收到Waitress的错误:

Error: Bad module 'cardisle'

在我的proc文件中,我有:

web: waitress-serve --port=$PORT cardisle.wsgi:application

如果我删除.wsgi扩展程序,则会收到其他错误:

Error: Bad object name 'application'

我已经尝试将对象名称改为wsgifunc,因为它在Waitress文档中,但没有运气。

任何帮助将不胜感激。我有一个wsgi.py文件,其中包含以下内容:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cardisle.settings")
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

5 个答案:

答案 0 :(得分:9)

这是一个关于女服务员的可怕事实:它隐藏了你的信息。

如果查看source,“错误模块”是“从wsgi模块导入应用程序失败”的代码。

要查看错误,尝试:

  1. 使用cd
  2. 登录dyno
  3. 导航到其中包含wsgi.py的目录(使用python
  4. 使用import wsgi
  5. 打开一个shell
  6. 正在运行~/proj/proj $ python Python 2.7.9 (default, Dec 11 2014, 17:18:51) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import wsgi Traceback (most recent call last): File "<stdin>", line 1, in <module> File "wsgi.py", line 36, in <module> application = get_wsgi_application() File "/app/.heroku/python/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application django.setup() File "/app/.heroku/python/lib/python2.7/site-packages/django/__init__.py", line 18, in setup apps.populate(settings.INSTALLED_APPS) File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate app_config = AppConfig.create(entry) File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/config.py", line 86, in create module = import_module(entry) File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named debug_toolbar
  7. 当我遇到此错误并执行此操作时,我得到了:

    web: waitress-serve --port=$PORT cardisle.wsgi:application

    这是一个更有帮助的错误。在我的情况下,我在生产中将DJANGO_SETTINGS_MODULE设置为'local'(没有相应的要求),因此导入失败。

    你的问题的确切性质会有所不同,但我会提到一个案例,当我开始时让我感到沮丧:

    如果您正在运行<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:background="#ffaa00"> <ImageView android:id="@+id/dataImageView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="fitStart" android:adjustViewBounds="true" android:visibility="visible" /> <VideoView android:id="@+id/dataVideoView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" /> ,则可能需要更改PYTHONPATH环境变量,以便PYTHONPATH + cardisle.wsgi是相关计算机上完全形成的现存路径。

    我今天晚上会为女服务员开一个PR,试图冒出导入错误。祝你好运!

答案 1 :(得分:0)

wsgi.py文件应位于cardisle目录中。女服务员正试图导入cardisle.wsgi。

答案 2 :(得分:0)

我想我找到了答案。如果您的项目布局如此(默认情况下是这样):

cardisle/
  cardisle/
    wsgi.py
  app1/
  app2/
  app3/

请尝试使用此Procfile:

web: waitress-serve --port=$PORT cardisle.cardisle.wsgi:application

我想到了这一点,因为Dave Hall的示例项目有不同的布局:

projectname/
  wsgi.py
  apps/
    app1/
    app2/
    app3/

哪个wsgi.py文件位于更高级别。您可能已经按照他的教程进行了操作,但据我所知,默认的Django布局并不像那样。

答案 3 :(得分:0)

尝试像这样修改你的WSGI文件(For Django 1.7):

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

我遇到了同样的错误,因为之前我的Procfile是按照Heroku指南中的解释配置的:

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

 application = Cling(get_wsgi_application())

这对我来说是一个问题。

答案 4 :(得分:0)

尝试使用:

cardisle:wsgi.application

不是carlisle"."wsgi":"application