问题描述
我已经将django项目部署在Heroku上(这是一个非常基础的项目,没有数据库)。 主页正在运行,但是当我从Django项目中请求包含imag的页面时出现服务器错误(500)。 当我问一个带有互联网图像的页面时,它工作正常。 因此,我的推论是无法正确提供静态文件,但我在编码中没有发现错误。
Heroku日志:
2020-09-10T04:31:02.719831 + 00:00 app [web.1]:10.63.145.103--[10 / Sep / 2020:04:31:02 +0000]“ GET / ES -home HTTP / 1.1“ 500 145” https://hamaktest.herokuapp.com/“” Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,like Gecko)Chrome / 85.0.4183.102 Safari / 537.36 “
2020-09-10T04:31:02.720549 + 00:00 heroku [router]:at = info method = GET path =“ / ES-home” host = hamaktest.herokuapp.com request_id = f9cc73c5-b170 -4853-9ca7-368255259a52 fwd =“ 117.196.158.121” dyno = web.1 connect = 0ms service = 60ms status = 500 bytes = 410 protocol = https
在Heroku版本中:
安装收集的软件包:asgiref,pytz,sqlparse,Django,gunicorn,whitenoise
远程:成功安装Django-3.1.1 asgiref-3.2.10 gunicorn-20.0.4 pytz-2020.1 sqlparse-0.3.1 whitenoise-5.2.0
远程:-----> $ python manage.py collectstatic --noinput
远程:将204个静态文件复制到'/ tmp / build_72d0a30f / staticfiles'中,进行481个后处理。
任何想法都值得欢迎。谢谢。
Jytar
我的settings.py文件:
ALLOWED_HOSTS = ['.hamaktest.herokuapp.com','127.0.0.1']
INSTALLED_APPS = [
'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','website'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware','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','whitenoise.middleware.WhiteNoiseMiddleware',]
ROOT_URLconf = 'hamak.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates','Dirs': [os.path.join(BASE_DIR,"templates")],'APP_Dirs': True,'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},]
Wsgi_APPLICATION = 'hamak.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR,'db.sqlite3'),}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'
MEDIA_URL = '/images/'
STATICFILES_Dirs = [
os.path.join(BASE_DIR,'static')
]
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR,'static/images')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesstorage'```
解决方法
当Django 3.1发布时,您引用BASE_DIR的方式发生了变化。如果您不想使用新版本的Django,请确保添加了要在需求中使用的版本。 txt文件。您的settings.py文件中具有(os.path.join)的任何地方都需要用新语法替换。
$(document).ready(function(){
$('#gridCheck1,#gridCheck2,#gridCheck3').click(function() {
if(this.checked){
$.ajax({
type: "POST",url: 'change_state.php',data: {
state: $(this).attr('value'),order_id: $(this).data('order'),},//--> send id of checked checkbox on other page
success: function(data) {
$('#container').html(data);
},error: function() {
//alert('it broke');
},complete: function() {
setInterval(function() {
location.reload();
},1000);
}
});
}
});
但是,如果这不是造成问题的原因,我发现通过在推送到heroku期间禁用静态文件收集可以解决问题。
groovy-maven-plugin
在成功建立了禁用staticfiles集合的构建之后,我进入了heroku CLI并运行
def get_umsatzsteuer_identifikationsnummer(string):
# Demo --> https://regex101.com/r/VHaS7Y/1
reg = r'DE[0-9 ]{12}|DE[0-9]{9}|DE [0-9]{9}'
match = re.compile(reg)
matched_words = match.findall(string)
return matched_words
string = "I want to get this DE813992525 and this DE813992526 number and this
number DE 813 992 526 and this number DE 813992526. I do not want the bank
account number: IBAN DE06300501100011054517."
get_umsatzsteuer_identifikationsnummer(string)
>>>>> ['DE813992525','DE813992526','DE 813 992 526','DE 813992526','DE063005011000']
,
问题已解决。
Django在图像代码中接受反斜杠:src =“ {%static” images \ picture01.png“%}”
但是Heroku没有。
我改为src =“ {%static” images / picture01.png“%}”
Django和Heroku都可以使用。
我使用了反斜杠“”,如Django教程中所示。因此请小心,因为这花费了我很多时间才能发现问题。
,对于遇到这个常见问题的其他人。
确保您的 HTML 整洁。我在我的基本模板中注释掉了对 CSS 文件的不正确引用,这对我来说是导致这个问题的原因。只需删除那些即可解决问题。