11

Heroku で Gunicorn からウェイトレスに切り替えようとしています。ログで、ウェイトレスからエラーが発生し続けます。

Error: Bad module 'cardisle'

私のprocfileには、次のものがあります。

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

.wsgi拡張機能を削除すると、別のエラーが発生します。

Error: Bad object name 'application'

wsgifuncウェイトレスのドキュメントにあるので、オブジェクト名も変更しようとしましたが、うまくいきませんでした。

どんな助けでも大歓迎です。次の wsgi.py ファイルがあります。

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

5 に答える 5

13

ここにウェイトレスに関する恐ろしい事実があります: それはあなたから情報を隠しています.

ソースを見ると、「Bad Module」は「wsgi モジュールからのアプリケーションのインポートに失敗しました」のコードです。

エラーを表示するには、次を試してください。

  1. でdynoにログインするheroku run bash
  2. wsgi.py が含まれるディレクトリに移動する ( を使用cd)
  3. でシェルを開くpython
  4. ランニングimport wsgi

このエラーが発生してこれを実行すると、次のようになりました。

~/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

これははるかに役立つエラーです。私の場合、本番環境で DJANGO_SETTINGS_MODULE を「ローカル」に設定していたため (適切な要件がありませんでした)、インポートに失敗しました。

問題の正確な性質はさまざまですが、私が始めたときに私を苛立たせたケースについて言及します。

を実行web: waitress-serve --port=$PORT cardisle.wsgi:applicationしている場合は、PYTHONPATH 環境変数を変更して、問題のマシン上で PYTHONPATH+cardisle.wsgi が完全な形で現存するパスになるようにする必要がある場合があります。

今晩ウェイトレスに PR を開き、インポート エラーをバブルアップさせます。それ以外の場合は頑張ってください!

于 2015-05-16T22:02:37.177 に答える
0

次のように WSGI ファイルを変更してみてください (Django 1.7 の場合):

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

前に、Heroku ガイドで説明されているように Procfile が構成されていたため、同じエラーが発生しました。

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

 application = Cling(get_wsgi_application())

そして、これは私にとって問題を引き起こしていました。

于 2015-02-24T02:11:35.833 に答える