====== 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) \\