Seite 1 von 1
Django einfach hosten
Verfasst: Sonntag 4. November 2018, 00:09
von Septias
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 ?
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 00:15
von Sirius3
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.
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 12:03
von Septias
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:
In settings.py habe ich nichts außer den ALLOWED_HOSTS, dem LANGUAGE_CODE, der TIME_ZONE und DEBUG geändert.
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 14:09
von DasIch
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.
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 16:00
von Septias
Aber warum funktioniert das dann bei Windows, und bei Debian nicht ?
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 16:12
von Septias
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/")))
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 16:46
von Sirius3
Wie liegen denn Deine statischen Dateien? Was steht in STATICFILES_FINDERS, was in STATICFILES_DIRS?
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 17:39
von Septias
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.
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 18:08
von Sirius3
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.
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 20:29
von Septias
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.
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 20:39
von Sirius3
@Septias: wenn man Dir jedes Wort aus der Nase ziehen muß, dann wird das wohl nichts.
Wo liegt z.B. `site/css/site.css`?
Re: Django einfach hosten
Verfasst: Sonntag 4. November 2018, 21:34
von Septias
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
