Αναβαθμίζοντας το Django σε μια καινούργια έκδοση¶
Παρόλο που μπορεί, μερικές φορές, να είναι περίπλοκη διαδικασία, η αναβάθμιση στην τελευταία έκδοση του Django έχει πολλά οφέλη:
- Προσθήκη καινούργιων λειτουργίων και βελτιστοποιήσεων.
- Επιδιόρθωση σφαλμάτων.
- Οι παλαιότερες εκδόσεις του Django δεν θα λαμβάνουν, από κάποιο σημείο κι ύστερα, ενημερώσεις ασφαλείας (security updates). (δείτε την Supported versions).
- Η αναβάθμιση σε κάθε καινούργια διανομή του Django κάνει τις μελλοντικές αναβαθμίσεις λιγότερο περίπλοκες, διατηρώντας τον κώδικα σας ενημερωμένο.
Παρακάτω επισημαίνουμε ορισμένα σημεία για να σας βοηθήσουμε να κάνετε την κάθε αναβάθμιση όσο γίνεται πιο ομαλά.
Απαραίτητη ανάγνωση¶
Αν είναι η πρώτη σας φορά που κάνετε αναβάθμιση, είναι χρήσιμο να διαβάσετε τον οδηγό της διαδικασίας για διαφορετικές εκδόσεις.
Έπειτα, θα πρέπει να εξοικειωθείτε με τις αλλαγές που έγιναν στην καινούργια Django έκδοση ή εκδόσεις:
- Διαβάστε το άρθρο σημειώσεις διανομής για κάθε “final” διανομή από την αμέσως επόμενη της δικής σας έκδοσης μέχρι αυτή που θέλετε να αναβαθμίσετε.
- Δείτε στο άρθρο χρονοδιάγραμμα του deprecation για τις σχετικές εκδόσεις, ούτως ώστε να αποφύγετε να χρησιμοποιείτε deprecated λειτουργίες.
Δώστε ιδιαίτερη προσοχή στις μη συμβατές, με παλαιότερες εκδόσεις, αλλαγές, για να πάρετε μια σαφή ιδέα του τι χρειάζεται για μια επιτυχημένη αναβάθμιση.
If you’re upgrading through more than one feature version (e.g. A.B to A.B+2), it’s usually easier to upgrade through each feature release incrementally (A.B to A.B+1 to A.B+2) rather than to make all the changes for each feature release at once. For each feature release, use the latest patch release (A.B.C).
The same incremental upgrade approach is recommended when upgrading from one LTS to the next.
Dependencies¶
Στις περισσότερες περιπτώσεις θα είναι απαραίτητο να αναβαθμίσετε και τα dependecies (πακέτα-εφαρμογές τρίτων) τα οποία χρησιμοποιείτε με το Django. Αν μια έκδοση Django εκδόθηκε πρόσφατα ή κάποια από τα dependencies σας δεν έχουν την ανάλογη και συχνή αναβάθμιση, τότε ίσως να μην υποστηρίζουν ακόμα την καινούργια έκδοση του Django. Σε αυτές τις περιπτώσεις θα πρέπει να περιμένετε μέχρις ότου εκδοθούν οι νέες εκδόσεις των dependencies σας.
Επιλύοντας τα deprecation warnings¶
Πριν την αναβάθμιση, μια καλή ιδέα είναι να επιλύσετε τυχόν deprecation warnings τα οποία γίνονται raised από το project σας, με την τρέχουσα έκδοση του Django. Επιδιορθώνοντας αυτά τα warnings, πριν την αναβάθμιση, εγγυάται ότι είστε ενημερωμένοι για τις περιοχές του κώδικα που θέλουν αλλαγή.
Στην Python, τα deprecation warnings, από προεπιλογή, δεν εμφανίζονται. Θα πρέπει να τα ενεργοποιήσετε χρησιμοποιώντας την παράμετρο -Wall
της εντολής python
ή την environment variable PYTHONWARNINGS
. Για παράδειγμα, για να εμφανίσετε τα warnings όταν τρέχετε τα τεστ σας, χρησιμοποιήστε την εντολή python
ως εξής:
$ python -Wall manage.py test
Αν δεν χρησιμοποιείτε τον Django test runner, θα χρειαστεί, επίσης, να σιγουρευτείτε ότι κάθε έξοδος της κονσόλας δεν γίνεται captured, κάτι το οποίο θα έκρυβε τα deprecation warnings. Για παράδειγμα, αν χρησιμοποιείτε το py.test:
$ PYTHONWARNINGS=all py.test tests --capture=no
Επιλύστε κάθε deprecation warning με την τρέχουσα έκδοση του Django που χρησιμοποιείτε και μετά προχωρήστε στην διαδικασία της αναβάθμισης.
Οι εφαρμογές τρίτων ίσως χρησιμοποιούν deprecated APIs προκειμένου να υποστηρίξουν πολλές εκδόσεις του Django, οπότε τα deprecation warnings στα πακέτα που έχετε εγκαταστήσει, ίσως να μην αποτελούν πρόβλημα. Αν ένα πακέτο-εφαρμογή δεν υποστηρίζει την τελευταία έκδοση του Django, σκεφτείτε μήπως κάνετε raise κάποιο issue ή να στείλετε ένα pull request για αυτό.
Εγκατάσταση¶
Όταν είστε έτοιμοι, εγκαταστήστε τη νέα έκδοση του Django. Αν χρησιμοποιείτε virtualenv και αυτή αποτελεί κάποια σημαντική αναβάθμιση, ίσως να θέλετε, πρώτα, να δημιουργήσετε ένα καινούργιο περιβάλλον με όλα τα dependencies.
Τα ακριβή βήματα που πρέπει να ακολουθήσετε, εξαρτώνται από την διαδικασία της εγκατάστασης. Ο πιο βολικός τρόπος είναι η χρήση του pip με το flag --upgrade
ή -U
:
$ pip install -U Django
Το pip, επίσης, απεγκαθιστά, αυτόματα την προηγούμενη έκδοση του Django.
Αν χρησιμοποιείτε κάποια άλλη μέθοδο εγκατάστασης, θα πρέπει πρώτα να απεγκαταστήσετε την προηγούμενη έκδοση του Django και μετά να εγκαταστήσετε την καινούργια σύμφωνα με τις οδηγίες εγκατάστασης της μεθόδου αυτής.
Τεστ¶
Όταν το νέο περιβάλλον είναι έτοιμο, τρέξτε ολόκληρη την σουίτα ελέγχων του Django για την εφαρμογή σας. Για ακόμη μια φορά, είναι χρήσιμο να ενεργοποιήσετε τα deprecation warnings ούτως ώστε να εμφανίζονται στην κονσόλα που τρέχει τα τεστ (μπορείτε επίσης να χρησιμοποιήσετε το flag για να τεστάρετε την εφαρμογή σας χειροκίνητα, χρησιμοποιώντας το manage.py runserver
):
$ python -Wall manage.py test
Αφού έχετε τρέξει όλα τα τεστ, διορθώστε τυχόν περιπτώσεις που το τεστ δεν πέτυχε (failures). Όσο έχετε φρέσκιες τις σημειώσεις της διανομής του Django που αναβαθμίζετε, μια καλή ιδέα είναι να επωφεληθείτε των νέων χαρακτηριστικών της καινούργια έκδοσης και να αλλάξετε τον κώδικα σας, σε κάποια σημεία, για να εξαλείψετε τυχόν deprecation warnings.
Deployment¶
Όταν είστε απολύτως σίγουροι ότι η εφαρμογή σας δουλεύει με την νέα έκδοση του Django, τότε είστε έτοιμοι να προχωρήσετε στο deployment του αναβαθμισμένου, πλέον, Django project σας.
Αν χρησιμοποιείτε το caching που παρέχει το Django, ίσως θα ήταν καλύτερα να αδειάσετε την μνήμη cache μετά την αναβάθμιση. Σε διαφορετική περίπτωση, ίσως να έχετε προβλήματα, για παράδειγμα, αν κάνετε caching τυχόν pickled objects καθώς αυτά τα objects δεν εγγυώνται ότι είναι συμβατά με όλες τις εκδόσεις του Django. Μια παλαιότερη ασυμβατότητα ήταν το caching των object της κλάσης HttpResponse
, είτε απ’ ευθείας είτε εμμέσως μέσω του decorator cache_page()
.