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

时间:2020-09-10 12:44:21

标签: django heroku django-staticfiles

我已经将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'```

3 个答案:

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