代码之家  ›  专栏  ›  技术社区  ›  Shahar 'Dawn' Or

gunicorn django import error“无法导入设置”“无法导入名称StaticFilesHandler”

  •  1
  • Shahar 'Dawn' Or  · 技术社区  · 11 年前

    跑步 shahar@shahar-desktop:~/proj/nopain/src/django⟫ gunicorn nopain.wsgi 在工作进程中给我一个错误:一个ImportError:

    跑步 python manage.py runserver 似乎工作正常。

    我正在尝试调试,但似乎python路径没有问题。。。请帮忙。

    2014-02-20 10:33:22 [6851] [INFO] Starting gunicorn 18.0
    2014-02-20 10:33:22 [6851] [INFO] Listening at: http://127.0.0.1:8000 (6851)
    2014-02-20 10:33:22 [6851] [INFO] Using worker: sync
    2014-02-20 10:33:22 [6856] [INFO] Booting worker with pid: 6856
    2014-02-20 02:33:23 [6856] [ERROR] Exception in worker process:
    Traceback (most recent call last):
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
        worker.init_process()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
        self.wsgi = self.app.wsgi()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
        self.callable = self.load()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
        return self.load_wsgiapp()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
        return util.import_app(self.app_uri)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
        __import__(module)
      File "/home/shahar/proj/nopain/src/django/nopain/wsgi.py", line 29, in <module>
        from dj_static import Cling
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/dj_static.py", line 8, in <module>
        from django.contrib.staticfiles.handlers import StaticFilesHandler as DebugHandler
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 13, in <module>
        from django.contrib.staticfiles.views import serve
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/contrib/staticfiles/views.py", line 16, in <module>
        from django.views import static
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/views/static.py", line 98, in <module>
        template_translatable = ugettext_noop("Index of %(directory)s")
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 60, in gettext_noop
        return _trans.gettext_noop(message)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 47, in __getattr__
        if settings.USE_I18N:
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__
        self._setup(name)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup
        self._wrapped = Settings(settings_module)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/conf/__init__.py", line 134, in __init__
        raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
    ImportError: Could not import settings 'nopain.settings' (Is it on sys.path?): cannot import name StaticFilesHandler
    Traceback (most recent call last):
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
        worker.init_process()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
        self.wsgi = self.app.wsgi()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
        self.callable = self.load()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
        return self.load_wsgiapp()
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
        return util.import_app(self.app_uri)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
        __import__(module)
      File "/home/shahar/proj/nopain/src/django/nopain/wsgi.py", line 29, in <module>
        from dj_static import Cling
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/dj_static.py", line 8, in <module>
        from django.contrib.staticfiles.handlers import StaticFilesHandler as DebugHandler
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 13, in <module>
        from django.contrib.staticfiles.views import serve
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/contrib/staticfiles/views.py", line 16, in <module>
        from django.views import static
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/views/static.py", line 98, in <module>
        template_translatable = ugettext_noop("Index of %(directory)s")
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 60, in gettext_noop
        return _trans.gettext_noop(message)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 47, in __getattr__
        if settings.USE_I18N:
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__
        self._setup(name)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup
        self._wrapped = Settings(settings_module)
      File "/home/shahar/.virtualenvs/nopain/local/lib/python2.7/site-packages/django/conf/__init__.py", line 134, in __init__
        raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
    ImportError: Could not import settings 'nopain.settings' (Is it on sys.path?): cannot import name StaticFilesHandler
    2014-02-20 02:33:23 [6856] [INFO] Worker exiting (pid: 6856)
    2014-02-20 10:33:23 [6851] [INFO] Shutting down: Master
    2014-02-20 10:33:23 [6851] [INFO] Reason: Worker failed to boot.
    

    看来我需要补充更多细节。。。根据stackoverflow的一个红色弹出窗口。所以这里有一些毫无意义的文本。

    这是我的 nopain/wsgi.py :

    import os
    import sys
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nopain.settings")
    
    from django.core.wsgi import get_wsgi_application
    from dj_static import Cling
    application = Cling(get_wsgi_application())
    

    这是我的 nopain/settings.py :

    # -*- coding: utf-8 -*-
    """Settings file for `nopain.co.il`."""
    
    ###############################################################################
    # BASE AND HELPER STATEMENTS ##################################################
    
    import os
    from django.utils.translation import ugettext
    
    SITE_ID = 1
    
    PROJECT_PATH = os.path.split(os.path.abspath(os.path.dirname(__file__)))[0]
    
    MIDDLEWARE_CLASSES = (
        'django.middleware.locale.LocaleMiddleware',
        'sslifyadmin.middleware.SSLifyAdminMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'axes.middleware.FailedLoginMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        # Uncomment the next line for simple clickjacking protection:
        # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'django.middleware.doc.XViewMiddleware',
        'cms.middleware.page.CurrentPageMiddleware',
        'cms.middleware.user.CurrentUserMiddleware',
        'cms.middleware.toolbar.ToolbarMiddleware',
        'cms.middleware.language.LanguageCookieMiddleware',
    )
    
    ROOT_URLCONF = 'nopain.urls'
    
    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.messages',
        'django.contrib.admin',
        'south',
        'djangojs',
    )
    
    SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
    
    
    ###############################################################################
    # DEBUGGING ###################################################################
    
    if os.environ.get('DEBUG') == 'True':
        DEBUG = True
    else:
        DEBUG = False
    
    TEMPLATE_DEBUG = DEBUG
    
    
    ###############################################################################
    # EMAILS ######################################################################
    
    ADMINS = (
        ('Shahar Or', 'mightyiampresence@gmail.com'),
    )
    
    MANAGERS = ADMINS
    
    SEND_BROKEN_LINK_EMAILS = True
    
    
    ###############################################################################
    # DATABASE ####################################################################
    
    INSTALLED_APPS += ('dj_database_url',)
    
    import dj_database_url
    DATABASES = {'default': dj_database_url.config()}
    
    
    ###############################################################################
    # SECURITY ####################################################################
    
    ALLOWED_HOSTS = ['*']
    
    SECRET_KEY = os.environ.get('SECRET_KEY')
    
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    
    INSTALLED_APPS += ('axes',)
    
    AXES_LOGIN_FAILURE_LIMIT = 5
    AXES_LOCK_OUT_AT_FAILURE = True
    AXES_USE_USER_AGENT = False
    AXES_COOLOFF_TIME = 1
    AXES_LOGGER = 'axes.watch_login'
    AXES_LOCKOUT_TEMPLATE = None
    AXES_LOCKOUT_URL = None
    AXES_VERBOSE = True
    
    ###############################################################################
    # STATIC FILES ################################################################
    
    INSTALLED_APPS += ('django.contrib.staticfiles',)
    
    STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles')
    
    STATIC_URL = '/static/'
    
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    )
    
    STATICFILES_DIRS = (os.path.join(PROJECT_PATH, 'static'),)
    
    
    ###############################################################################
    # TEMPLATES ###################################################################
    
    TEMPLATE_LOADERS = (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )
    
    TEMPLATE_DIRS = (os.path.join(PROJECT_PATH, 'templates'),)
    
    TEMPLATE_CONTEXT_PROCESSORS = (
        'django.contrib.auth.context_processors.auth',
        'django.core.context_processors.i18n',
        'django.core.context_processors.request',
        'django.core.context_processors.media',
        'django.core.context_processors.static',
        'cms.context_processors.media',
        'sekizai.context_processors.sekizai',
    )
    
    CMS_TEMPLATES = (
        ('base.html', ugettext('Base template')),
        ('home.html', ugettext('Home page template')),
        ('text-page.html', ugettext('Text page template')),
        ('contact.html', ugettext('Contact page template')),
        ('article.html', ugettext('Article')),
        ('videos.html', ugettext('Videos')),
        ('gallery.html', ugettext('Gallery')),
    )
    
    
    ###############################################################################
    # I18N ########################################################################
    
    USE_I18N = True
    LANGUAGE_CODE = 'en-us'
    LANGUAGES = [
        ('en', u'English\u200B'),
        ('he', u'עברית'),
        ('de', u'Deutsche'),
    ]
    
    LOCALE_PATHS = (os.path.join(PROJECT_PATH, 'conf/locale'),)
    
    USE_TZ = True
    TIME_ZONE = 'Asia/Jerusalem'
    
    USE_L10N = True
    
    INSTALLED_APPS += (
        'bidiutils',
    )
    
    TEMPLATE_CONTEXT_PROCESSORS += (
        'bidiutils.context_processors.bidi',
    )
    
    
    ###############################################################################
    # WSGI ########################################################################
    
    WSGI_APPLICATION = 'nopain.wsgi.application'
    
    
    ###############################################################################
    # MEDIA #######################################################################
    
    if os.environ.get('MEDIA_STORAGE') == 'local':
        MEDIA_ROOT = os.path.join(
            PROJECT_PATH,
            'media/'
        )
        MEDIA_URL = '/media/'
        THUMBNAIL_DEFAULT_STORAGE = \
            'easy_thumbnails.storage.ThumbnailFileSystemStorage'
    
    elif os.environ.get('MEDIA_STORAGE') == 'remote':
        INSTALLED_APPS += ('storages',)
        DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
        THUMBNAIL_DEFAULT_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
        AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
        AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
        AWS_STORAGE_BUCKET_NAME = 'nopain-media-files'
        MEDIA_URL = 'https://s3-eu-west-1.amazonaws.com/%s/media/'\
            % os.environ.get('AWS_S3_MEDIA_BUCKET_NAME')
        MEDIA_ROOT = 'media/'
    
    INSTALLED_APPS += (
        'easy_thumbnails',
    )
    
    THUMBNAIL_BASEDIR = 'thumbs'
    
    THUMBNAIL_DEBUG = DEBUG
    
    THUMBNAIL_MEDIA_ROOT = MEDIA_ROOT
    THUMBNAIL_MEDIA_URL = MEDIA_URL
    
    
    ###############################################################################
    # CMS #########################################################################
    
    INSTALLED_APPS += (
        'cms',
        'mptt',
        'menus',
        'sekizai',
        'cms.plugins.text',
        'reversion',
        'cmsplugin_gallery',
        'cms.plugins.picture',
        'cms.plugins.link',
        'cms.plugins.googlemap',
        'cmsplugin_video_youtube',
    )
    
    # PLACEHOLDERS
    
    CMS_PLACEHOLDER_CONF = {
        'text': {
            'plugins': ['TextPlugin'],
            'name': ugettext('Text'),
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
        'text2': {
            'plugins': ['TextPlugin'],
            'name': ugettext('Text'),
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
        'gallery': {
            'name': ugettext('Gallery'),
            'plugins': ['CMSGalleryPlugin'],
            'limits': {
                'global': 1,
                'CMSGalleryPlugin': 1,
            },
        },
        'google_map': {
            'name': ugettext('Google Map'),
            'plugins': ['GoogleMapPlugin'],
            'limits': {
                'global': 1,
                'GoogleMapPlugin': 1,
            },
        },
        'youtubes_preface': {
            'name': ugettext('Preface'),
            'plugins': ['TextPlugin'],
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
        'youtubes_header_testimonials': {
            'name': ugettext('Testimonials header'),
            'plugins': ['TextPlugin'],
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
        'youtubes_testimonials': {
            'name': ugettext('Testimonial YouTubes'),
            'plugins': ['YouTubeVideoPlugin'],
        },
        'youtubes_header_paula': {
            'name': ugettext('Paula header'),
            'plugins': ['TextPlugin'],
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
        'youtubes_paula': {
            'name': ugettext('Paula YouTubes'),
            'plugins': ['YouTubeVideoPlugin'],
        },
        'youtubes_header_mds': {
            'name': ugettext('MD\'s header'),
            'plugins': ['TextPlugin'],
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
        'youtubes_mds': {
            'name': ugettext('MD\'s YouTubes'),
            'plugins': ['YouTubeVideoPlugin'],
        },
        'youtubes_copyright': {
            'name': ugettext('Copyright notice'),
            'plugins': ['TextPlugin'],
            'limits': {
                'global': 1,
                'TextPlugin': 1,
            },
        },
    }
    
    ###############################################################################
    # WYMEDITOR ###################################################################
    
    WYM_TOOLS = ",\n".join([
        "{'name': 'Bold', 'title': 'Strong', 'css': 'wym_tools_strong'}",
        "{'name': 'Italic', 'title': 'Emphasis', 'css': 'wym_tools_emphasis'}",
        "{'name': 'Superscript', 'title': 'Superscript',\
        'css': 'wym_tools_superscript'}",
        "{'name': 'Subscript', 'title': 'Subscript',\
        'css': 'wym_tools_subscript'}",
        "{'name': 'InsertOrderedList', 'title': 'Ordered_List',\
        'css': 'wym_tools_ordered_list'}",
        "{'name': 'InsertUnorderedList', 'title': 'Unordered_List',\
        'css': 'wym_tools_unordered_list'}",
        "{'name': 'Indent', 'title': 'Indent', 'css': 'wym_tools_indent'}",
        "{'name': 'Outdent', 'title': 'Outdent', 'css': 'wym_tools_outdent'}",
        "{'name': 'Undo', 'title': 'Undo', 'css': 'wym_tools_undo'}",
        "{'name': 'Redo', 'title': 'Redo', 'css': 'wym_tools_redo'}",
        "{'name': 'Paste', 'title': 'Paste_From_Word', 'css': 'wym_tools_paste'}",
        "{'name': 'ToggleHtml', 'title': 'HTML', 'css': 'wym_tools_html'}",
        "{'name': 'CreateLink', 'title': 'Link', 'css': 'wym_tools_link'}",
        "{'name': 'Unlink', 'title': 'Unlink', 'css': 'wym_tools_unlink'}",
        #"{'name': 'InsertImage', 'title': 'Image', 'css': 'wym_tools_image'}",
        "{'name': 'InsertTable', 'title': 'Table', 'css': 'wym_tools_table'}",
        #"{'name': 'Preview', 'title': 'Preview', 'css': 'wym_tools_preview'}",
        "{'name': 'DirectionLtr', 'title': 'Left_to_Right',\
        'css': 'wym_tools_direction_ltr'}",
        "{'name': 'DirectionRtl', 'title': 'Right_to_Left',\
        'css': 'wym_tools_direction_rtl'}",
        "{'name': 'DirectionRemove', 'title': 'Remove_Direction',\
        'css': 'wym_tools_direction_remove'}",
    ])
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   Shahar 'Dawn' Or    11 年前

    所以我通过以下方式解决了这个问题:

    1. 不去 gunicorn nopain.wsgi 但要继续 python manage.py run_gunicorn (需要 gunicorn 在里面 INSTALLED_APPS )
    2. 我已经发现,这样我必须 settings.LOGGING 用一个 version settings.LOGGING_CONFIG = None (还是真的 False ?)