====== Django en producció a Railway.app ======
Railway.app és un PaaS similar a Heroku o altres que ens facilita la posada en producció d'aplicacions web.
Per posar en producció un app [[Django]], però, el procés és un xic més complex que amb altres //frameworks//.
{{https://railway.app/brand/logo-dark.png?200}}{{django-logo.png?200}}
Referències:
* CLI Railway: https://docs.railway.app/develop/cli
* ...
{{tag> #FpInfor #DawMp07 #DawMp07Uf3 #DawMp07Uf03 #DawMp07Uf4 #DawMp07Uf04 django web api framework rest #Ceti #CetiMp03 #Ciber #CiberMp03 }}
\\
===== Tutorial bàsic =====
Aquest [[https://dev.to/osahenru/using-railway-app-to-deploy-your-django-project-3ah1|tutorial de Django en Railway]] funciona a data de Maig de 2023 amb Django 4.2
\\
===== Setup BD ====
A part de la pujada de codi que hem fet anteriorment, ens faltarà:
- Fer les migracions
- Recollir arxius estàtics
- Crear un superusuari d'inici. [[https://stackoverflow.com/questions/32532900/not-able-to-create-super-user-with-django-manage-py|Aquest post]] ens ajudarà per integrar-ho al Build Command.
- Crear dades de mostra amb Faker o altres que haguem pogut fer.
Per realitzar això caldrà anar a
Settings -> Build Command
{{railway-build-settings.png}}
I hi posarem les instruccions per a que tot funcioni:
. /opt/venv/bin/activate && mkdir static && python3 manage.py collectstatic && python3 manage.py migrate && DJANGO_SUPERUSER_USERNAME=super DJANGO_SUPERUSER_PASSWORD=P@ssw0rd python3 manage.py createsuperuser --email=appadmin@example.com --noinput
Això sí, un cop posat en producció, entra i posa-hi una password més segura.
Si hem fet una comanda personalitzada per crear dades amb el Faker, es pot afegir a la comanda indicada més amunt. Per exemple, si has seguit l'exercici [[Django Lliga]] pots afegir la la comanda:
python3 manage.py crea_lliga "Lliga 1a divisió"
\\
===== Servir arxius estàtics =====
Si encara que fem el ''collectstatic'' no ens aparèixen els //static files// (css, imatges, etc.) podem forçar Django a servir-los. No és el més eficient, però per fer un desplegament de prova o de mostra pot ser una solució raonable.
[[https://stackoverflow.com/questions/17713703/how-do-you-serve-static-files-when-using-the-django-runserver-development-server|Aquest post explica com servir static files amb Django]].
Només cal tocar l'arxiu ''urls.py'' i afegir la darrera línia d'aquest exemple (amb els imports pertinents):
from django.contrib import admin
from django.urls import include,path
from django.conf.urls.static import static
from django.conf import settings
from lliga.views import profile
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
path("accounts/", include("django.contrib.auth.urls")),
path("accounts/profile/", profile, name="profile"),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
\\