bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


django_heroku

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
django_heroku [2022/02/14 15:14]
enrique_mieza_sanchez
django_heroku [2022/03/07 18:30]
enrique_mieza_sanchez [Afegint una BD PostgreSQL]
Línia 2: Línia 2:
  
 Heroku és un sistema de **PaaS o //Platform as a Service//** que ens permet posar en producció aplicacions sense necessitat de mantenir la virtualització, el sistema operatiu o la instal·lació de la base de dades. Heroku és un sistema de **PaaS o //Platform as a Service//** que ens permet posar en producció aplicacions sense necessitat de mantenir la virtualització, el sistema operatiu o la instal·lació de la base de dades.
 +
 +{{ https://upload.wikimedia.org/wikipedia/commons/e/ec/Heroku_logo.svg?300 }}
  
 {{tag> #FpInfor #Daw #DawMp08 #DawMp08Uf2 #DawMp08Uf02 heroku IaaS PaaS SaaS django web framework }} {{tag> #FpInfor #Daw #DawMp08 #DawMp08Uf2 #DawMp08Uf02 heroku IaaS PaaS SaaS django web framework }}
  
-{{ responsibilities.png }}+{{ responsibilities.png?direct }} 
 + 
 +===== Preparant el nostre projecte Django per a deplegament a Heroku =====
  
 Referències: Referències:
-  * https://devcenter.heroku.com/articles/django-app-configuration+  * Tutorial per configurar una app Django existent: 
 +    * https://devcenter.heroku.com/articles/django-app-configuration 
 +  * Tutorial per iniciar una app Django amb una plantilla: 
 +    * https://devcenter.heroku.com/articles/getting-started-with-python
  
 Per treballar amb Django a Heroku ens caldrà alguns ajustos extra a part del què ens diu el tutorial oficial. Per treballar amb Django a Heroku ens caldrà alguns ajustos extra a part del què ens diu el tutorial oficial.
  
 Instal·lar en local llibreries de client per a PostgreSQL: Instal·lar en local llibreries de client per a PostgreSQL:
-  $ sudo apt install libpq-dev+  $ sudo apt install libpq-dev python3-dev gcc
   (env) $ pip install gunicorn psycopg2-binary django-heroku    (env) $ pip install gunicorn psycopg2-binary django-heroku 
   (env) $ pip freeze > requirements.txt   (env) $ pip freeze > requirements.txt
  
 +Crearem un ''Procfile'' a l'arrel del projecte, un arxiu propi de Heroku (d'una sola línia) que li diu com ha de posar en producció la nostra aplicació:
  
-#https://github.com/jacobian/dj-database-url/issues/107 +<file txt Procfile> 
-#settings.py: (dalt de tot)+web: gunicorn mysite.wsgi 
 +</file> 
 + 
 +No és imprescindible, però podeu provar si us funciona el projecte en local amb: 
 +  (env) $ gunicorn mysite.wsgi 
 + 
 +Si ho teniu tot a punt **a la branca main**, podeu posar en producció fent: 
 +  $ git add . 
 +  $ git commit -am "heroku deploy" 
 +  $ git push heroku main 
 + 
 +\\ 
 + 
 +==== Troubleshooting ==== 
 +De vegades ens apareix un error de SSL al fer el //push// a producció. [[https://github.com/jacobian/dj-database-url/issues/107|Segons aquesta issue del mòdul dj-database-url]] la solució és afegir aquesta línia a final del tot del projecte ''settings.py'': 
 +  del DATABASES['default']['OPTIONS']['sslmode'
 + 
 +Si no esteu **a la branca main** potser no funciona adequadament. Mireu de moure els arxius de producció a la branca main.  
 + 
 +\\ 
 + 
 +==== Ajustant settings.py ==== 
 +De forma que ens quedarà un arxiu: 
 + 
 +<file python settings.py> 
 +# importem django_heroku l'inici de l'arxiu
 import django_heroku import django_heroku
  
-Activate Django-Heroku.+...resta del config.py... 
 + 
 +# activem Django-Heroku al final de l'arxiu
 django_heroku.settings(locals()) django_heroku.settings(locals())
-#si dona error ssl https://devcenter.heroku.com/articles/getting-started-with-python#set-up+ 
 +# si dona error ssl https://devcenter.heroku.com/articles/getting-started-with-python#set-up
 #del DATABASES['default']['OPTIONS']['sslmode'] #del DATABASES['default']['OPTIONS']['sslmode']
 +</file>
 +
 +\\
 +
 +===== Utilitzant SQLite =====
 +
 +Per defecte podem provar a arrencar amb SQLite:
 +  $ git push heroku master
 +  (...es posa en producció...)
 +  $ heroku run bash
 +  ~ $ python3 manage.py migrate
 +  ~ $ python3 manage.py createsuperuser
 +
 +Això crearà la BD, un superuser, i ens permetrà accedir a la nostra aplicació en producció. Entreu i afegiu alguna enquesta.
 +
 +\\
 +
 +===== Afegint una BD PostgreSQL =====
 +
 +Si posem una DB sqlite com ve per defecte en Django tindrem el problema de que [[https://devcenter.heroku.com/articles/sqlite3|al tenir Heroku un sistema d'arxius efímer, i que es destrueix cíclicament, sabem que la BD es destruiria en menys en 24 hores]]. Per evitar aquest problema ens cal una BD externa a Heroku on poder emmagatzemar dades.
 +
 +Hem vist en el tutorial de Heroku que si podem afegir una BD PostgreSQL així:
 +  $ heroku addons:create heroku-postgresql:hobby-dev
  
 +la nostra aplicació disposarà de les credencials a la variable d'entorn ''DATABASE_URL'' del tipus:
 +  DATABASE_URL=postgres://usuari:password@servidor:port/dbname
  
  
 +<WRAP important>
 +En versions anteriors calia configurar expressament ''DATABASE_URL'' en ''settings.py'' amb alguns packages extra de ''pip'' com [[https://github.com/kennethreitz/dj-database-url|dj-database-url]] o [[https://django-environ.readthedocs.io/en/latest/|django-environ]].
  
 +A partir de cert moment ja no cal fer cap modificació per carregar ''DATABASE_URL''.
 +Simplement, fem un ''export'':
 +  $ export DATABASE_URL=postgres://usuari:password@servidor:port/dbname
 +  (env) $ ./manage.py migrate
 +  (env) $ ./manage.py runserver
  
 +i arrencar Django. Quan trobi la variable farà un override del què digui DATABASES i agafarà ''DATABASE_URL'' com la BD primària.
 +</WRAP>
  
  
 +\\
  
django_heroku.txt · Darrera modificació: 2022/03/07 18:30 per enrique_mieza_sanchez