# Τεκμηρίωση του Django - 1.10.7

# Αναβαθμίζοντας το Django σε μια καινούργια έκδοση

Παρόλο που μπορεί, μερικές φορές, να είναι περίπλοκη διαδικασία, η αναβάθμιση στην τελευταία έκδοση του Django έχει πολλά οφέλη:

- Προσθήκη καινούργιων λειτουργίων και βελτιστοποιήσεων.

- Επιδιόρθωση σφαλμάτων.

- Οι παλαιότερες εκδόσεις του Django δεν θα λαμβάνουν, από κάποιο σημείο κι ύστερα, ενημερώσεις ασφαλείας (security updates). (δείτε την Supported versions).

- Η αναβάθμιση σε κάθε καινούργια διανομή του Django κάνει τις μελλοντικές αναβαθμίσεις λιγότερο περίπλοκες, διατηρώντας τον κώδικα σας ενημερωμένο.

Παρακάτω επισημαίνουμε ορισμένα σημεία για να σας βοηθήσουμε να κάνετε την κάθε αναβάθμιση όσο γίνεται πιο ομαλά.

## Απαραίτητη ανάγνωση

Αν είναι η πρώτη σας φορά που κάνετε αναβάθμιση, είναι χρήσιμο να διαβάσετε τον οδηγό της διαδικασίας για διαφορετικές εκδόσεις.

Έπειτα, θα πρέπει να εξοικειωθείτε με τις αλλαγές που έγιναν στην καινούργια Django έκδοση ή εκδόσεις:

- Διαβάστε το άρθρο σημειώσεις διανομής για κάθε ‘final’ διανομή από την αμέσως επόμενη της δικής σας έκδοσης μέχρι αυτή που θέλετε να αναβαθμίσετε.

- Δείτε στο άρθρο χρονοδιάγραμμα του deprecation για τις σχετικές εκδόσεις, ούτως ώστε να αποφύγετε να χρησιμοποιείτε deprecated λειτουργίες.

Δώστε ιδιαίτερη προσοχή στις μη συμβατές, με παλαιότερες εκδόσεις, αλλαγές, για να πάρετε μια σαφή ιδέα του τι χρειάζεται για μια επιτυχημένη αναβάθμιση.

## 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()`.