2015-02-05 11 views
4

當我們運行$ python manage.py runserver --settings=project.settings.local有4個不同的可能的組合:只有當Debug = False AND數據庫在Heroku上設置爲生產數據庫時,爲什麼只有服務器500會導致django失敗?

  1. 調試=真& & DB =本地=>運行良好
  2. 調試=真& & DB =生產=>運行良好
  3. 調試= False & & DB = local =>運行良好
  4. Debug = False & & DB =生產=>服務器500錯誤

第四個是同時出現的:最重要,最難調試,唯一一個失敗。

我們的Django的設置是安裝在該結構:

settings 
├── base.py 
├── __init__.py 
├── local.py 
└── production.py 

在這個測試中,我們只用local.py和修改的內容每次運行。

調試= True和DB =本地這是local.py文件:

from project.settings.base import * 

DEBUG = True 
TEMPLATE_DEBUG = True 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': ***, 
     'USER': ***, 
     'PASSWORD': ***, 
     'HOST': 'localhost', 
     'PORT': '5432', 
    } 
} 

調試=假和DB =生產,這是local.py文件中使用:

from project.settings.base import * 

ALLOWED_HOSTS = ['*'] 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': ***, 
     'USER': ***, 
     'PASSWORD': ***, 
     'HOST': '***.amazonaws.com', 
     'PORT': '5432', 
    } 
} 

我們也跑了它具有Debug = True和DB =生產以及Debug = False和DB = local,兩者都有效。

數據庫設置直接從Heroku配置複製,並且只要Debug設置爲True,與數據庫的連接就會很好,因此我們確信它不是數據庫模式或連接問題。當Debug爲True時,我們無法弄清楚生產數據庫是如何工作的,並且在DB使用本地數據庫設置爲False的情況下運行,但由於某種原因,兩者結合失敗。我們還將代碼部署到Heroku,並確認它在Debug設置爲True的情況下運行,但在Debug設置爲False時出現相同的Server 500錯誤。

以供參考,這是內容我們base.py

import os 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = *** 


# Application definition 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'appname', 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ROOT_URLCONF = 'project.urls' 

WSGI_APPLICATION = 'project.wsgi.application' 

# Database 
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases 

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

# Internationalization 
# https://docs.djangoproject.com/en/1.6/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 
TIME_ZONE = 'UTC' 
USE_I18N = True 
USE_L10N = True 
USE_TZ = True 

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.6/howto/static-files/ 

STATIC_ROOT = 'staticfiles' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) 

我們的谷歌搜索想出了很多人錯誤配置ALLOWED_HOSTS變量,有類似症狀的結束了,但似乎並沒有被我們的問題。有沒有人對導致這個問題的原因有所瞭解?

按照要求,這裏是production.py,但應該注意的是,這個設置文件從來沒有用在這個實驗中。

from project.settings.base import * 

import dj_database_url 

DEBUG = False 
TEMPLATE_DEBUG = False 

ALLOWED_HOSTS = ['*', '.***.com', '.herokuapp.com', 'localhost', '127.0.0.1'] 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': ***, 
     'USER': ***, 
     'PASSWORD': ***, 
     'HOST': '***.amazonaws.com', 
     'PORT': '5432', 
    } 
} 

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
+0

您能否包含production.py?謝謝 – 2015-02-05 21:22:13

+0

@KamyarGhasemlou當然,加了它 – 2015-02-05 21:33:28

+0

你可以發佈顯示異常的'python manage.py runserver'的輸出嗎? – 2015-02-05 21:37:21

回答

1

什麼,你應該在這裏做是這樣的:

  • 通過在一個終端窗口中運行$ heroku logs --tail打開你的Heroku的日誌。
  • 在另一個終端窗口中運行$ heroku ps:restart重新啓動您的dynos。

觀察日誌,並查看實際回溯。這會告訴你到底發生了什麼。根據您的配置,它可能是一些問題。

0

配置服務器電子郵件並查看由雙位煉金術士提到的堆棧跟蹤是關鍵。我們增加這些線路我們設置:

EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '***' 
EMAIL_HOST_PASSWORD = '***' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 
SERVER_EMAIL = EMAIL_HOST_USER 

而在堆棧跟蹤收到的電子郵件,出現此錯誤:

ValueError: The file 'stylesheets/application.css' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7fdcebb94550>. 

我們希望有問題,之前的靜態文件,但儘管我們會修復它們。它抱怨無法找到的css文件不再存在,也沒有引用任何地方,所以我不知道爲什麼這個錯誤甚至會出現,但我們通過添加一個空的application.css文件來修復它。

5

我有同樣的問題。但後來我刪除 此行settings.py

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

現在我沒有500錯誤,當DEBUG =假。但可能,我想gzip功能不再工作。

0

我希望這有助於某人某一天。 我有這個類似的問題,我花了一段時間才解決它。 檢查你的<a></a>標籤。如果href屬性指向不存在的模板/鏈接。 您可能會遇到這樣的

相關問題