我已经将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'```
答案 0 :(得分:1)
当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']
答案 1 :(得分:0)
问题已解决。
Django在图像代码中接受反斜杠:src =“ {%static” images \ picture01.png“%}”
但是Heroku没有。
我改为src =“ {%static” images / picture01.png“%}”
Django和Heroku都可以使用。
我使用了反斜杠“”,如Django教程中所示。因此请小心,因为这花费了我很多时间才能发现问题。
答案 2 :(得分:0)
对于遇到这个常见问题的其他人。
确保您的 HTML 整洁。我在我的基本模板中注释掉了对 CSS 文件的不正确引用,这对我来说是导致这个问题的原因。只需删除那些即可解决问题。