Django einfach hosten

Django, Flask, Bottle, WSGI, CGI…
Antworten
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Hallo,

da ich lokal einfach nur mit "manage.py runserver" ohne Probleme auf die Webseite zugreifen kann, wollte ich das auch auf meinem dedicated Server machen, um dann mit <domain>:8000 darauf zuzugreifen. Der einzige Unterschied ist, dass ich hinter "manage.py runserver" 0.0.0.0:8000 angefügt habe. Jetzt werden die static-files nicht mehr richtig behandelt (404). Wie kann ich das einfach lösen ?
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Was soll man da jetzt dazu sagen? Du machst was falsch, mach es richtig, dann funktioniert es auch.

Zeig den Browser-Log, Server-Log, settings.py, etc.
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Also sollte es in der Theorie einfach so funktioinieren (python3.6 manage.py runserver 0.0.0.0:8000) ? War verwirrt, weil ich davor eine Webseite mit nginx und uwsgi gehostet habe, und dafür noch STATIC_ROOT in settings.py definieren musste, und dann halt mit manage.py collecstatic usw. Also wie es mir scheint, brauch man das nicht unbedingt.
Serverlog, soweit man es so nennen kann:
Bild

In settings.py habe ich nichts außer den ALLOWED_HOSTS, dem LANGUAGE_CODE, der TIME_ZONE und DEBUG geändert.
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Septias hat geschrieben: Sonntag 4. November 2018, 12:03 War verwirrt, weil ich davor eine Webseite mit nginx und uwsgi gehostet habe, und dafür noch STATIC_ROOT in settings.py definieren musste, und dann halt mit manage.py collecstatic usw. Also wie es mir scheint, brauch man das nicht unbedingt.
Das scheint dir falsch und damit dass auch auffällt fehlen dir auch die static files.

In bestimmten Umgebungen (z.b. Heroku) macht es Sinn statische Dateien durch deinen WSGI Server (nicht runserver) ausliefern zu lassen, dafür gibt es middlewares wie whitenoise.
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Aber warum funktioniert das dann bei Windows, und bei Debian nicht ?
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Außerdem funktioniert es auch nach dem Erstellen vom "static"-ordner und dem Ausführen von collectstatic nicht. (Ja, ich habe static-root definiert (STATIC_ROOT = os.path.join(BASE_DIR, "static/")))
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie liegen denn Deine statischen Dateien? Was steht in STATICFILES_FINDERS, was in STATICFILES_DIRS?
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Das ist meine setting.py Datei:

Code: Alles auswählen

"""
Django settings for personal_website project.

Generated by 'django-admin startproject' using Django 2.1.1.

For more information on this file, see
https://docs.djangoproject.com/en/2.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, "static/")


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

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'X)'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ['www.xxx.de', 'xxx.de']


# Application definition

INSTALLED_APPS = [
    'blog',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

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',
]

ROOT_URLCONF = 'personal_website.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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 = 'personal_website.wsgi.application'


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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators

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',
    },
]


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

LANGUAGE_CODE = 'de-DE'

TIME_ZONE = 'Europe/Berlin'

USE_I18N = True

USE_L10N = True

USE_TZ = True


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

STATIC_URL = '/static/'

Da steht nichts zu STATICFILES_FINDERS und STATICFILES_DIRS, wo finde ich das ? Meine static-ordner ist auf dem selben Level wie manage.py. In dem Ordern ist dann der Unterordnet admin etc.
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Es macht ja wenig Sinn, als «STATIC_ROOT» das Verzeichnis anzugeben, wo Du sowieso schon die statischen Dateien sammelst.
«STATICFILES_DIRS» dagegen ist bei Dir leer, wo der STATICFILES_FINDERS FileSystemFinder sie sucht, und deshalb nicht findet.

Code: Alles auswählen

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static/")
]
oder speichere die statischen Dateien in einem «[app]/static»-Verzeichniss für jede App separat, wie es üblich ist.
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Ich habe es aber so gemacht, dass ich die Staticfiles seperat für jede App in static gespeichert habe. Ein Beispiel: blog/static/blog/css/blog_list.css (blog ist die App).

Wenn ich das oben vorgeschlagene zu settings.py hinzufüge bekomme ich den Fehler: "(staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC _ROOT setting.", wenn ich STATIC_ROOT raus nehme, funktioniert es auch nicht.
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Septias: wenn man Dir jedes Wort aus der Nase ziehen muß, dann wird das wohl nichts.

Wo liegt z.B. `site/css/site.css`?
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Die Datei ist auch in den Staticfiles von der Blog-App. Die App ist in personal_webseite, dem selben Ordner wie manage.py. Der Absolute Pfad von site.css ist: /home/mein_name/webseite/personal_website/blog/static/site/css/site.css

Aber ist okay, ich hoste es jetzt wie ich es bereites kenne, einfach mit Nginx und uwsgi, dann kann ich auch ne subdomain einstellen. Trotzdem Danke für die Hilfe ! Nächstesmal versuche ich direkt die benötigten Infos zu geben, um euch das ewige Nachfragen zu erstparen, sry :-)
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Antworten