在Heroku Server上部署Django错误500-据说是静态文件问题

问题描述

我已经将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 文件的不正确引用,这对我来说是导致这个问题的原因。只需删除那些即可解决问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...