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/21 12:49]
enrique_mieza_sanchez
django_heroku [2022/03/07 18:30] (actual)
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 ===== ===== Afegint una BD PostgreSQL =====
  
-Si posem una DB sqlite com ve per defecte en Django tindrem el problema de que al fer un nou desplegament destruirem la BD antiga. Per evitar aquest problema ens cal una BD externa a Heroku on poder emmagatzemar dades.+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
  
-Hem vist en el tutorial que si volem afegir una BD Postgre, la nostra aplicació disposarà de les credencials a la variable d'entorn ''DATABASE_URL''. Per tal de poder configurar adequadament Django i carregar les credencials, hi diversos //packages// de PIP que ens no resolen: +i arrencar Django. Quan trobi la variable farà un override del què digui DATABASES i agafarà ''DATABASE_URL'' com la BD primària
-  - Utilitzar el [[https://github.com/kennethreitz/dj-database-url|package dj-database-url]] instal·lable via ''pip''+</WRAP>
-  - Utilitzar el [[https://django-environ.readthedocs.io/en/latest/|package django-environ]] instal·lable via ''pip''.+
  
  
 +\\
  
django_heroku.1645447743.txt.gz · Darrera modificació: 2022/02/21 12:49 per enrique_mieza_sanchez