The King is dead! RIP 2006-2012

Ένα μεγάλο ευχαριστώ σε όλη την παρέα
Περισσότερα στο lexx.gr

Οδηγός αναβάθμισης Drupal 6 σε Drupal 7

01 Mar 2011 by lexx

Το webz.gr έκανε μια πολύ μεγάλη αναβάθμιση. Drupal 6 σε Drupal 7 με απόλυτη επιτυχία. Δεν ξέρω αν το έχει επιχειρήσει κανείς άλλος ακόμα ή αν είμαστε οι πρώτοι. Όπως και να έχει θα γράψω εδώ έναν οδηγό που για μένα δούλεψε πολύ καλά. Ο οδηγός αυτός χωρίζεται σε 3 μέρη. Τα βασικά βήματα, τo theming κάποια διάσπαρα πράγματα.

ΠΑΜΕ!

σημείωση: Υπάρχει documentation απλά δεν είναι τόσο ψαγμένο όσο το παρακάτω ;p

σημείωση 2: Για να πετύχετε το upgrade θα πρέπει να έχετε καλή γνώση της αρχιτεκτονικής του drupal και βασικές γνώσεις php. Αλλιώς προτείνω να το ξανασκεφτείτε.

σημείωση 3: Πολλά από τα πράγματα που αναφέρω παρακάτω μπορεί να μην είναι κατάλληλα για όλες τις σελίδες καθώς έχουν δοκιμαστεί μόνο εδώ.

 

Άντε ΠΑΜΕ!

  1. Βεβαιωθείτε ότι όλα τα modules τα οποία χρησιμοποιείτε είναι διαθέσιμα για το Drupal 7 ή έχουν ενσωματωθεί στο core. 
  2. Αναβαθμίστε το Drupal 6 στην τελευταία του έκδοση, το ίδιο και όλα τα modules. 
  3. Κάνετε 20 backup τα αρχεία σας και την βάση δεδομένων. 
  4. Αντιγράψτε όλα σας τα αρχεία και την βάση δεδομένων σε κάποιο άλλο σημείο του server ή και σε κάποιον άλλο server. Αν κάτι πάει στραβά, θέλετε το παλιό installation να τρέχει. 
  5. Κάνετε login ως ο user 1 και βάζετε το site σε maintenance mode. 
  6. Βάζετε ως βασικό theme το Garland. 
  7. Κάνετε disable ολα τα modules πέρα από τα core. 
  8. Σβήνετε όλα τα core αρχεία από το ftp πέρα από αυτά που βρίσκονται στο sites directory, με εξαίρεση το sites/default/default.settings.php, το οποίο το σβήνετε επίσης. 
  9. Εάν είχατε κάνει αλλαγές στο .htaccess και στο robots.txt, θα πρέπει να τις κάνετε ξανά. 
  10. Κατεβάζετε το drupal 7, το κάνετε extract και τρέχετε το update.php αφού βεβαιωθείτε ότι το sites/default/settings.php είναι writabble.
  11. Μόλις ολοκληρωθεί το update κάνετε ένα backup. 

Πάνω κάτω αυτά που είπαμε τώρα είναι ένα βαρεμένο version του readme.txt.

Πάμε στα πιο ψαγμένα.

Το cck module μπήκε στον πυρήνα αλλά δεν κάνει αυτόματα import τα παλιά πεδία. Τι κάνουμε για αυτό; Κατεβάζουμε το τελευταίο version (7.x) του cck module (ακόμα είναι dev αλλά εμένα μου έπαιξε καλά) και κάνουμε enable το content_migrate. Αν πάνε όλα καλά αυτό το module θα μεταφέρει τα παλιά cck στο core του drupal. Μόλις όλα τα cck γίνουν import μπορούμε να αρχίσουμε να κάνουμε uninstall τα παλιά module του ckk(πχ. imagefield κλπ) και άλλα module τα οποία έχουν μεταφερθεί στο core.

Τι γίνεται τώρα εδώ. Πολλά module δεν γίνονται uninstall γιατί βαράνε errors επειδή χρησιμοπιούν functions που έχουν καταργηθεί στο drupal 7 και βγάζουν error. Υπάρχουν 2 περιπτώσεις.

  1. Το πρόβλημα βρίσκεται στο αρχείο module.install 
  2. Το πρόβλημα βρίσκεται στο αρχείο module.module 

Στην πρώτη περίπτωση πρέπει να ανοίξουμε το module.install και να αντικαταστήσουμε τα function που έχουν καταργηθεί με κάποια που τα έχουν αναπληρώσει έτσι ώστε να γίνει το uninstall σωστά.

Στην δεύτερη περίπτωση έκανα κάτι που δεν ξέρω αν είναι απόλυτα σωστό. Μου δούλεψε πάντως. Έκανα rename to module.module έτσι ώστε να μην ασχοληθεί μαζί του και έγινε κανονικά η διαδικάσία.

Για τα module τα οποία δεν έχουν μεταφερθεί στο core, απλά βάζουμε το νέο version και κάνουμε update.

Βεβαιωθείτε ότι έχετε διαγράψει από το ftp τα module που πλέον δεν χρησιμοποιείτε.

Theming

Αν έχετε κάποιο theme framework όπως το Zen, βάζετε την επόμενη του έκδοση του και αρχείο αρχείο κάνετε τις αλλαγές που χρειάζεται. Κάποια παραδείγματα.

  • Για να κάνει ovverride το node.tpl.php ενός αρχείου θέλει δύο παύλες πλέον. node--post.tpl.php αντί για node-post.php. 
  • Έχουν αλλάξει πολλά variable, το object tree του $node αλλά και η λογική του $content. Παίζει πλέον με το render() function. 
  • Τα taxonomies πλέον για το node είναι refernced cck fields και παίζουν όπως και τα άλλα ccs field με το render(). Παράδειγμα render($content[field_whatever]).

Δεν θα σας τα πω όλα, το πιάσατε το νόημα. Αν έχετε πολύ παραμετροποιημένα theme, η φάση είναι pain in the ass. Η νέα λογική όμως είναι ανώτερη με διαφορά από την προηγούμενη.

Γενικά

Παρακάτω διάσπαρτα προβληματάκια που συνάντησα και η λύση τους

  • Το l() function έχει αλλάξει με αποτέλεσμα να δημιουργήσει προβλήματα σε διάφορα σημεία. 
  • Τα imported cck field είναι πιθανό να βγάζουν errors. Δεν βρήκα λύση να ξεφορτωθώ τα error αλλά δεν δημιουργούν κάποιο πρακτικό πρόβλημα. Για να μην τα βλέπουν οι χρήστες τα έκανα visible μόνο για τον admin μέσω css. 
  • Τα token έχουν αλλάζει λογική, όπου τα έχετε χρησιμοποιήσει θα πρέπει να τα ξαναφτιάξετε. 
  • Τα views δεν γίνονται import από το παλιό version, χεράκι και εκεί. 

Γενικά δεν είναι μια εύκολη διαδικασία, σε μερικά site μπορεί να είναι ακόμα αδύνατη μάλιστα η αναβάθμιση. Αν το επιχειρήσετε θα χρειαστείτε 2 μέρες τουλάχιστον καθαρές από κάθε αντιπερισπαμό για να μην κάνετε λάθη. Εμένα μου πήρε περίπου 12 ώρες το full transition και δεν χρειάστηκε πουθενά να κάνω κάτι 2 φορές αλλά αυτό δεν είναι το στάνταρ.

Επίσης το webz ήταν ένα σχετικά απλό site, πιο πολύπλοκες σελίδες ίσως να χρειάζονται περισσότερο χρόνο. Αν έχετε να κάνετε διορθώσεις, επισημάνεις ή και να ρωτήσετε κάτι, με μεγάλη χαρά να σας απαντήσω και να εμπλουτήσω το θέμα.