Résultat de mes migrations de joomla 2.5.24 et + vers 3.3.3 et +
Remarque préalable
A ce jour (novembre 2014), je n'ai pas encore terminé toutes les migrations de mes sites.
Cet article est donc ré-actualisé périodiquement.
Remarque importante
Contrairement à ce que l'on peut lire sur différents sites, la migration de joomla 2.5 à 3 n'est pas toujours si simple.
Si votre site a été crée avec joomla 1.7 ou +, que seuls des composants, modules et plugins édités par le joomla team sont installés, il y a effectivement fort à parier que vous n'aurez pas de grandes difficultés à faire la migration.
Par contre si votre site est dans un des cas suivants :
- il a déjà subit une migration de joomla 1.5 à joomla 1.6, 1.7 ou 2.5,
- il a plusieurs extensions d'origines différentes,
- de nombreux articles,
- possède un arbre des catégories ou des menus volumineux,
- est de forte fréquentation,
il faudra envisager quelques difficultés à faire l'upgrade en 3+.
Dans TOUS LES CAS, il faudra impérativement cloner votre site J 2.5 sur un serveur de test, à la configuration la plus proche que possible de votre site de production, et faire l’intégralité de la démarche de migration, avant d'envisager l'opération sur le site de production.
Dans mon cas pour des gros sites à forte fréquentation, j'ai été amené à faire plusieurs fois la démarche, afin de valider chaque procédure.
Pour des petits (sites quelques centaines d'articles, et peu de composants), le test de procédure a été positif dès la première fois.
En respectant le étapes décrites dans la suite de cet article, j'ai fortement réduit le nombre d'opération et la durée de la manipulation.
Opérations préalables
Dans la configuration de Joomla 2.5 :
- mettre le site hors-ligne (si votre site en accessible par le web).
Attention : en aucun cas faire la manip directement sur le site de production, je parle ici d'un site de test, installé sur le serveur de production, afin d'avoir exactement la même configuration et version des logiciels (php, mysql,etc...) que le site de production, - activer provisoirement le rapport d'erreur sur simple,
- désactiver le cache,
- vérifier l'emplacement des dossiers log et tmp (cas de copie du site),
- On désactivera aussi de suite le SEO pour rendre les URL plus lisibles pour un développeur, et retrouver plus facilement le composant ou la vue posant problème lors des tests.
Vérification des composants, modules et plugins
Attention, cette liste n'est pas limitative, j'ai juste mentionné les extensions que j'ai rencontrées.
Chacun vérifiera les composants, modules et plugins un par un sur son site.
- Désactiver le plugin système - "se souvenir de moi" (remenber me).
en cas d'oubli il semblerait que le fait de forcer enabled à 0 pour l'extension plg_system_rement dans la table #_extensions soit suffisant. - Verifier l'ensemble des plugins, en portant une attention particulière aux plugins de type "system" dont l'éditeur n'est pas le "joomla team".
En effect un plugin système non compatible pourra bloquer le processus da mise à jour.
Pour les developpeurs de composants, modules et plugins'application on se referera à cet article... qui permet de solutionner 95% des problèmes bloquants.
- Installer la dernière version de rokbox si vous utilisez ce type de popup (plugin system en version 2.0.7 au jour de la rédaction de cet article) à télécharger ici...
Autres manip
- Dans extensions / Mise à Jour : purger la cache (évite une page blanche en passant de lts en sts dans la mise à jour de Joomla),
- Reconstruire l'arbre des catégories : Contenu / Catégories / Reconstruire,
- Idem pour les menus:
Opérations sur la base de donnée
- Dans joomla 2.5, dans extensions / base de donnée faire systématiquement "corriger".
- Vider impérativement la table des sessions par une commande sql type "truncate #__session" (ou utiliser phpMyAdmin).
Ceci vous évitera une belle erreur 500 lors de la mise à jour avec un message de type "...mod_fcgid: read data timeout..." dans le error.log d'apache.
C'est parti...
Dans le panneau d'administration de Joomla 2.5.x cliquez sur le bouton / paramètres passer sur support à court terme (STS).
Validez.
Voir aussi : Cet article...
Normalement le système découvre la nouvelle version 3.
Cliquez sur mettre à jour (transfert direct)
Validez....et croisez les doigts !
Sinon passez au § suivant...
Tenter de récupérer une migration ratée !
Uniquement si on est dans un cas desesperé et sans garanties de résultats.
Erreur : Call to a member function set() on a non-object in … controller.php on line ...
Type d'erreur : Fatal error: Call to a member function set() on a non-object in /home/sourcech/public_html/administrator/components/com_login/controller.php on line 38
Sur le contrôleur principal d'un composant, sur une ligne de type $this->input->set('view', 'login'); (les paramètres peuvent différer).
Correctif :
- renommer /librairies/joomla en /librairies/joomla-old
- recopier /librairies/joomla d'un J3 à jour.
Peu de composants ajoutent des éléments dans ce dossier.
Erreur : Fatal error: Class JControllerLegacy cannot extend from interface JController in .../libraries/cms/controller/legacy.php on line 22
Renommer /libraries/cms en cms-old et recopier /librairies/cms d'un pack d'installation dezippé.
Erreur : Tables manquantes
J'ai eu le cas des tables #_postinstall_message et #_content_types qui manquaient.
Il faut les créer avec phpMyAdmin.
#_postinstall_message
Avec phpMyAdmin (remplacer # par votre prefixe de tables).
--
-- Structure de la table '#__postinstall_messages'
--
CREATE TABLE IF NOT EXISTS '#__postinstall_messages' (
'postinstall_message_id' bigint(20) unsigned NOT NULL AUTO_INCREMENT,
'extension_id' bigint(20) NOT NULL DEFAULT '700' COMMENT 'FK to #__extensions',
'title_key' varchar(255) NOT NULL DEFAULT '' COMMENT 'Lang key for the title',
'description_key' varchar(255) NOT NULL DEFAULT '' COMMENT 'Lang key for description',
'action_key' varchar(255) NOT NULL DEFAULT '',
'language_extension' varchar(255) NOT NULL DEFAULT 'com_postinstall' COMMENT 'Extension holding lang keys',
'language_client_id' tinyint(3) NOT NULL DEFAULT '1',
'type' varchar(10) NOT NULL DEFAULT 'link' COMMENT 'Message type - message, link, action',
'action_file' varchar(255) DEFAULT '' COMMENT 'RAD URI to the PHP file containing action method',
'action' varchar(255) DEFAULT '' COMMENT 'Action method name or URL',
'condition_file' varchar(255) DEFAULT NULL COMMENT 'RAD URI to file holding display condition method',
'condition_method' varchar(255) DEFAULT NULL COMMENT 'Display condition method, must return boolean',
'version_introduced' varchar(50) NOT NULL DEFAULT '3.2.0' COMMENT 'Version when this message was introduced',
'enabled' tinyint(3) NOT NULL DEFAULT '1',
PRIMARY KEY ('postinstall_message_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
#_content_types
Avec phpMyAdmin (remplacer # par votre préfixe de tables).
--
-- Structure de la table '#__content_types'
--
CREATE TABLE IF NOT EXISTS '#__content_types' (
'type_id' int(10) unsigned NOT NULL AUTO_INCREMENT,
'type_title' varchar(255) NOT NULL DEFAULT '',
'type_alias' varchar(255) NOT NULL DEFAULT '',
'table' varchar(255) NOT NULL DEFAULT '',
'rules' text NOT NULL,
'field_mappings' text NOT NULL,
'router' varchar(255) NOT NULL DEFAULT '',
'content_history_options' varchar(5120) NOT NULL COMMENT 'JSON string for com_contenthistory options',
PRIMARY KEY ('type_id'),
KEY 'idx_alias' ('type_alias')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10005
Unknown column 'title_alias' in 'j17_content'
Avec phpMyAdmin (remplacer # par votre préfixe de tables).
ALTER TABLE #_content' ADD 'title_alias' VARCHAR( 255 ) NOT NULL DEFAULT '' AFTER 'alias'
ALTER TABLE '#_content' CHANGE 'title_alias' 'title_alias' VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Deprecated in Joomla! 3.0';
Si on accede enfin à l'administration :
- Corriger la base : extension -> bd
- Essayer de faire « decouvrir »
- Installer le template d'admin isis
Voir également mes autres articles de la section Passer de Joomla 2.5 à Joomla 3 pour les autres problème plus spécifiques que j'ai rencontrés.