Piwik Update 1.8

De EjnTricks

Cet article présente la mise à jour de Piwik en version 1.8. Sur le site officiel, deux méthodes sont présentées:

  • Mise à jour directement depuis l'application.
  • Mise à jour par déploiement de la nouvelle version.

Dans tous les cas, il est important de sauvegarder le fichier de configuration config.ini.php créé lors de l'installation initiale, dans le répertoire config.

Dans le cadre de cet article, la mise à jour est effectuée manuellement avec le même principe que pour l'installation initiale. Théoriquement, la mise à jour est simple. Cependant il est nécessaire de n'oublier aucune étape.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Dependencies.gif Pré requis

L'installation va être réalisée dans le répertoire /var/opt/piwik-1.8, sur lequel un lien est placé à l'emplacement /var/opt/piwik. Ainsi les installations de mises à jour seront facilitées.

#sudo mkdir /var/opt/piwik-1.8


System-Install-icon.png Déploiement de l'application

L'application sera déployée dans le répertoire /var/opt/piwik-1.8 créé préalablement. La version est téléchargée dans le répertoire /tmp du serveur.

#sudo wget -O /tmp/piwik-1.8.zip http://builds.piwik.org/piwik-1.8.zip

Puis elle est installée en décompressant l'archive.

#sudo unzip /tmp/piwik-1.8.zip -d /var/opt/piwik-1.8/

Attention, l'archive contient un sous répertoire, nécessitant de déplacer les fichiers une fois la décompression terminée.

La décompression du fichier entraîne la création du répertoire piwik, qui n'est pas souhaité. Des fichiers ne sont pas nécessaires et donc supprimés. Les droits d'accès aux fichiers sont modifiés pour ne permettre que le compte d'exécution du serveur Apache.

#sudo rm /var/opt/piwik-1.8/How\ to\ install\ Piwik.html
#sudo mv /var/opt/piwik-1.8/piwik/* /var/opt/piwik-1.8/
#sudo rmdir /var/opt/piwik-1.8/piwik
#sudo chown -R www-data:www-data /var/opt/piwik-1.8

Au niveau de la procédure d'installation, il est indiqué de placer les permissions pour tous les comptes. Cependant, cela présente un problème évident de sécurité. Les droits mis en place seront uniquement pour le compte d'exécution du serveur Web, soit www-data dans le cadre de cet article.

#sudo find /var/opt/piwik-1.8/ -type f -exec chmod 0640 {} \;
#sudo find /var/opt/piwik-1.8/ -type d -exec chmod 0750 {} \;
#sudo chmod 750 /var/opt/piwik-1.8

Icon-Configuration-Settings.png Configuration

Sur la procédure de mise à jour officielle, il est recommandée de sauvegarder le fichier de configuration. Du fait de cette procédure de mise à jour, il suffit de copier depuis le précédent emplacement, dans la nouvelle instance.

#sudo cp /var/opt/piwik-1.7.1/config/config.ini.php /var/opt/piwik-1.8/config/config.ini.php
#sudo chown www-data:www-data /var/opt/piwik-1.8/config/config.ini.php
#sudo cp /var/opt/piwik-1.7.1/config/.htaccess /var/opt/piwik-1.8/config/.htaccess
#sudo chown www-data:www-data /var/opt/piwik-1.8/config/.htaccess

Dans le cadre de cette étude, un logo personnalisé avait été mis en place. Il faut donc le recopier dans la nouvelle instance.

#sudo cp /var/opt/piwik-1.7.1/themes/.htaccess /var/opt/piwik-1.8/themes/.htaccess
#sudo cp /var/opt/piwik-1.7.1/themes/logo-header.png /var/opt/piwik-1.8/themes/logo-header.png
#sudo cp /var/opt/piwik-1.7.1/themes/logo.png /var/opt/piwik-1.8/themes/logo.png
#sudo chown www-data:www-data /var/opt/piwik-1.8/themes/.htaccess
#sudo chown www-data:www-data /var/opt/piwik-1.8/themes/logo-header.png
#sudo chown www-data:www-data /var/opt/piwik-1.8/themes/logo.png


Plugin-icon.png Plugins

Sur la précédente version, des plugins ont été mis en place. Etant référencé dans la base de données, il est impératif que ceux-ci soient de nouveau disponibles dans la nouvelle instance. Il n'est pas nécessaire de les installer de nouveau, mais tout simplement de mettre en place les différents liens. En effet, lors de leur installation, il a été choisi de les externaliser. Trois plugins avaient été mis en place:

Les liens sont donc placés dans le répertoire extensions de piwik.

#sudo ln -s /var/datas/piwik/extensions/GeoIP /var/opt/piwik-1.8/plugins/GeoIP
#sudo chown -h www-data:www-data /var/opt/piwik-1.8/plugins/GeoIP
#sudo ln -s /var/datas/piwik/extensions/GeoIPMap /var/opt/piwik-1.8/plugins/GeoIPMap
#sudo chown -h www-data:www-data /var/opt/piwik-1.8/plugins/GeoIPMap
#sudo ln -s /var/datas/piwik/extensions/UserSettingsExt /var/opt/piwik-1.8/plugins/UserSettingsExt
#sudo chown -h www-data:www-data /var/opt/piwik-1.8/plugins/UserSettingsExt


Une restriction d'accès était mise en place dans la précédente version. Celle-ci est reproduite.

#sudo cp /var/opt/piwik-1.7.1/plugins/.htaccess /var/opt/piwik-1.8/plugins/
#sudo chown www-data:www-data /var/opt/piwik-1.8/plugins/.htaccess

Configuration-icon.png Publication sous Apache

Lors de l'installation initiale, la publication sous Apache pointait sur le lien /var/opt/piwik. Ce principe permet d'activer la nouvelle version rapidement, sans toucher au paramétrage de Apache. Il est juste nécessaire de modifier le répertoire pointé par le lien.

#sudo rm /var/opt/piwik
#sudo ln -s /var/opt/piwik-1.8 /var/opt/piwik
#sudo chown -h www-data:www-data /var/opt/piwik


Icon-database-process.png Mise à jour base de données

Lors de l'accès suivant à l'application, une fenêtre indique que la base de données doit être mise à jour.


Il est possible de mettre à jour les données en ligne de commande pour les bases volumineuses. En effet, cette mise à jour étant effectuée depuis l'interface, il serait possible d’obtenir un TimeOut d'exécution de la requête HTTP. Dans le cadre de cet article, la mise à jour de la base est effectuée en cliquant sur le bouton Mettez Piwik à jour. En fin de traitement, un message de confirmation est présenté.


Bug-icon.png Bug mise à jour base de données

Malgré le message de confirmation, la base de données n'avait pas été mise à jour. Cela est du à l'initialisation du compte d'accès à la base de données, ne permettant pas la mise à jour de la structure de la base.


Heureusement, le message d'erreur présenté permet d'analyser à partir du code source.

QLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'field list'

Go to Piwik
Login

Backtrace:
#0 /var/opt/piwik-1.8/libs/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /var/opt/piwik-1.8/libs/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#2 /var/opt/piwik-1.8/libs/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT iddashbo...', Array)
#3 /var/opt/piwik-1.8/core/Db/Adapter/Pdo/Mysql.php(220): Zend_Db_Adapter_Pdo_Abstract->query('SELECT iddashbo...', Array)
#4 /var/opt/piwik-1.8/libs/Zend/Db/Adapter/Abstract.php(736): Piwik_Db_Adapter_Pdo_Mysql->query('SELECT iddashbo...', Array)
#5 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(80): Zend_Db_Adapter_Abstract->fetchAll('SELECT iddashbo...', Array)
#6 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(262): Piwik_Sql::fetchAll('SELECT iddashbo...', Array)
#7 /var/opt/piwik-1.8/plugins/Dashboard/Dashboard.php(42): Piwik_FetchAll('SELECT iddashbo...', Array)
#8 /var/opt/piwik-1.8/plugins/Dashboard/Dashboard.php(77): Piwik_Dashboard::getAllDashboards('etienne')
#9 [internal function]: Piwik_Dashboard->addMenus(Object(Piwik_Event_Notification))
#10 /var/opt/piwik-1.8/libs/Event/Dispatcher.php(284): call_user_func_array(Array, Array)
#11 /var/opt/piwik-1.8/core/PluginsManager.php(633): Event_Dispatcher->postNotification(Object(Piwik_Event_Notification), false, false)
#12 /var/opt/piwik-1.8/core/Menu/Main.php(65): Piwik_PostEvent('Menu.add')
#13 /var/opt/piwik-1.8/core/Menu/Main.php(90): Piwik_Menu_Main->get()
#14 /var/opt/piwik-1.8/plugins/CoreHome/Controller.php(58): Piwik_GetMenu()
#15 /var/opt/piwik-1.8/plugins/CoreHome/Controller.php(92): Piwik_CoreHome_Controller->getDefaultIndexView()
#16 [internal function]: Piwik_CoreHome_Controller->index()
#17 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#18 /var/opt/piwik-1.8/index.php(53): Piwik_FrontController->dispatch()
#19 {main}

A ce stade, en regardant la description de la table user_dashboard, préfixée par la constante définie lors de l'installation soit piwik_user_dashboard dans le cadre de cette utilisation, il est constaté qu'il manque la colonne name.

mysql> describe piwik_user_dashboard;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| login       | varchar(100) | NO   | PRI | NULL    |       |
| iddashboard | int(11)      | NO   | PRI | NULL    |       |
| layout      | text         | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Cela prouve que la mise à jour de la base de données ne s'est pas déroulée correctement. Ces actions vont être réalisées manuellement à posteriori, avec un compte permettant de modifier la structure de la base, par exemple le compte root de MySql. Lors des premières tentatives de modification, en passant par le compte d'accès défini, un message d'erreur était affiché, confirmant le manque de droit du compte:

 mysql> ALTER TABLE `piwik_pdf` CHANGE `aggregate_reports_format` `display_format` TINYINT(1) NOT NULL;
 ERROR 1142 (42000): ALTER command denied to user 'piwik'@'localhost' for table 'piwik_pdf'

Les scripts de mise à jour se situent dans le répertoire core/Updates, soit /var/opt/piwik-1.8/core/Updates.

-rw-r--r--  1 www-data www-data 2168 mai   22  2011 0.2.10.php
-rw-r--r--  1 www-data www-data  905 août  20  2010 0.2.12.php
-rw-r--r--  1 www-data www-data  813 mai   22  2011 0.2.13.php
-rw-r--r--  1 www-data www-data  917 août  20  2010 0.2.24.php
-rw-r--r--  1 www-data www-data 2495 mai   22  2011 0.2.27.php
-rw-r--r--  1 www-data www-data 1022 août  20  2010 0.2.32.php
-rw-r--r--  1 www-data www-data 1074 août  20  2010 0.2.33.php
-rw-r--r--  1 www-data www-data  607 août  20  2010 0.2.34.php
-rw-r--r--  1 www-data www-data  622 août  20  2010 0.2.35.php
-rw-r--r--  1 www-data www-data  678 août  20  2010 0.2.37.php
-rw-r--r--  1 www-data www-data  767 août  20  2010 0.4.1.php
-rw-r--r--  1 www-data www-data 1103 août  20  2010 0.4.2.php
-rw-r--r--  1 www-data www-data  676 août  20  2010 0.4.4.php
-rw-r--r--  1 www-data www-data 1082 août  20  2010 0.4.php
-rw-r--r--  1 www-data www-data 1768 mars  10 04:47 0.5.4.php
-rw-r--r--  1 www-data www-data 1164 août  20  2010 0.5.5.php
-rw-r--r--  1 www-data www-data 1847 août  20  2010 0.5.php
-rw-r--r--  1 www-data www-data  975 août  20  2010 0.6.2.php
-rw-r--r--  1 www-data www-data 1360 mars  10 04:47 0.6.3.php
-rw-r--r--  1 www-data www-data 3535 sept. 25  2010 0.6-rc1.php
-rw-r--r--  1 www-data www-data  626 août  20  2010 0.7.php
-rw-r--r--  1 www-data www-data 1264 août  29  2010 0.9.1.php
-rw-r--r--  1 www-data www-data  768 mars   4 23:04 1.1.php
-rw-r--r--  1 www-data www-data 1032 mars   4 23:04 1.2.3.php
-rw-r--r--  1 www-data www-data  852 avril  4  2011 1.2.5-rc1.php
-rw-r--r--  1 www-data www-data  643 avril  8  2011 1.2.5-rc7.php
-rw-r--r--  1 www-data www-data 6364 mai   20  2011 1.2-rc1.php
-rw-r--r--  1 www-data www-data  482 févr. 15  2011 1.2-rc2.php
-rw-r--r--  1 www-data www-data  738 avril 30  2011 1.4-rc1.php
-rw-r--r--  1 www-data www-data 1434 avril 30  2011 1.4-rc2.php
-rw-r--r--  1 www-data www-data 2165 mai   22  2011 1.5-b1.php
-rw-r--r--  1 www-data www-data 1123 mai   22  2011 1.5-b2.php
-rw-r--r--  1 www-data www-data 2746 mai   22  2011 1.5-b3.php
-rw-r--r--  1 www-data www-data  606 mai   22  2011 1.5-b4.php
-rw-r--r--  1 www-data www-data  732 mai   22  2011 1.5-b5.php
-rw-r--r--  1 www-data www-data  481 juin   4  2011 1.5-rc6.php
-rw-r--r--  1 www-data www-data 3086 sept. 18  2011 1.6-b1.php
-rw-r--r--  1 www-data www-data  477 oct.  14  2011 1.6-rc1.php
-rw-r--r--  1 www-data www-data  691 mars  25 22:04 1.7.2-rc5.php
-rwxr-xr-x  1 www-data www-data 1242 avril  1 08:42 1.7.2-rc7.php*
-rw-r--r--  1 www-data www-data  794 nov.   9  2011 1.7-b1.php

La mise à jour étant réalisée depuis une version 1.7.1, les deux scripts suivants sont analysés et reproduit.

  • 1.7.2-rc5.php
  • 1.7.2-rc7.php

Fichier 1.7.2-rc5.php

L'analyse de ce fichier montre la modification de la table PREFIX_pdf.

<?php
/**
 * Piwik - Open source web analytics
 *
 * @link http://piwik.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 * @version $Id: 1.7.2-rc5.php 6113 2012-03-25 20:04:22Z JulienM $
 *
 * @category Piwik
 * @package Updates
 */

/**
 * @package Updates
 */
class Piwik_Updates_1_7_2_rc5 extends Piwik_Updates
{
        static function getSql($schema = 'Myisam')
        {
                return array(
                    'ALTER TABLE `'. Piwik_Common::prefixTable('pdf') .'`
                        CHANGE `aggregate_reports_format` `display_format` TINYINT(1) NOT NULL' => false
                );
        }

        static function update()
        {
                try {
                        Piwik_Updater::updateDatabase(__FILE__, self::getSql());
                }
                catch(Exception $e){}
        }
}

La requête exécutée est donc la suivante:

 mysql> ALTER TABLE `piwik_pdf` CHANGE `aggregate_reports_format` `display_format` TINYINT(1) NOT NULL;
 Query OK, 0 rows affected (0.07 sec)

La structure de la table était:

mysql> describe piwik_pdf;
+--------------------------+--------------+------+-----+---------+----------------+
| Field                    | Type         | Null | Key | Default | Extra          |
+--------------------------+--------------+------+-----+---------+----------------+
| idreport                 | int(11)      | NO   | PRI | NULL    | auto_increment |
| idsite                   | int(11)      | NO   |     | NULL    |                |
| login                    | varchar(100) | NO   |     | NULL    |                |
| description              | varchar(255) | NO   |     | NULL    |                |
| period                   | varchar(10)  | YES  |     | NULL    |                |
| format                   | varchar(10)  | YES  |     | NULL    |                |
| aggregate_reports_format | tinyint(1)   | NO   |     | NULL    |                |
| email_me                 | tinyint(4)   | YES  |     | NULL    |                |
| additional_emails        | text         | YES  |     | NULL    |                |
| reports                  | text         | NO   |     | NULL    |                |
| ts_created               | timestamp    | YES  |     | NULL    |                |
| ts_last_sent             | timestamp    | YES  |     | NULL    |                |
| deleted                  | tinyint(4)   | NO   |     | 0       |                |
+--------------------------+--------------+------+-----+---------+----------------+
13 rows in set (0.01 sec)

La nouvelle structure est alors:

mysql> describe piwik_pdf;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| idreport          | int(11)      | NO   | PRI | NULL    | auto_increment |
| idsite            | int(11)      | NO   |     | NULL    |                |
| login             | varchar(100) | NO   |     | NULL    |                |
| description       | varchar(255) | NO   |     | NULL    |                |
| period            | varchar(10)  | YES  |     | NULL    |                |
| format            | varchar(10)  | YES  |     | NULL    |                |
| display_format    | tinyint(1)   | NO   |     | NULL    |                |
| email_me          | tinyint(4)   | YES  |     | NULL    |                |
| additional_emails | text         | YES  |     | NULL    |                |
| reports           | text         | NO   |     | NULL    |                |
| ts_created        | timestamp    | YES  |     | NULL    |                |
| ts_last_sent      | timestamp    | YES  |     | NULL    |                |
| deleted           | tinyint(4)   | NO   |     | 0       |                |
+-------------------+--------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)

Fichier Fichier 1.7.2-rc7.php

L'analyse de ce fichier montre la modification de la table PREFIX_user_dashboard.

<?php
/**
 * Piwik - Open source web analytics
 *
 * @link http://piwik.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 * @version $Id: 1.7.2-rc7.php 6146 2012-04-01 06:42:16Z matt $
 *
 * @category Piwik
 * @package Updates
 */

/**
 * @package Updates
 */
class Piwik_Updates_1_7_2_rc7 extends Piwik_Updates
{
        static function getSql($schema = 'Myisam')
        {
                return array(
                    'ALTER TABLE `'. Piwik_Common::prefixTable('user_dashboard') .'`
                        ADD `name` VARCHAR( 100 ) NULL DEFAULT NULL AFTER  `iddashboard`' => false,
                );
        }

        static function update()
        {
                try {
                        $dashboards = Piwik_FetchAll('SELECT * FROM `'. Piwik_Common::prefixTable('user_dashboard') .'`');
                        foreach($dashboards AS $dashboard) {
                                $idDashboard = $dashboard['iddashboard'];
                                $login       = $dashboard['login'];
                                $layout      = $dashboard['layout'];
                                $layout      = html_entity_decode($layout);
                                $layout      = str_replace("\\\"", "\"", $layout);
                                Piwik_Query('UPDATE `'. Piwik_Common::prefixTable('user_dashboard') .'` SET layout = ? WHERE iddashboard = ? AND login = ?', array($layout, $idDashboard, $login));
                        }
                        Piwik_Updater::updateDatabase(__FILE__, self::getSql());
                }
                catch(Exception $e){}
        }
}

La requête exécutée est donc la suivante:

 mysql> ALTER TABLE `piwik_user_dashboard` ADD `name` VARCHAR( 100 ) NULL DEFAULT NULL AFTER  `iddashboard`;
 Query OK, 0 rows affected (0.07 sec)


La structure de la table était:

mysql> describe piwik_user_dashboard;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| login       | varchar(100) | NO   | PRI | NULL    |       |
| iddashboard | int(11)      | NO   | PRI | NULL    |       |
| layout      | text         | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

La nouvelle structure est alors:

mysql> describe piwik_user_dashboard;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| login       | varchar(100) | NO   | PRI | NULL    |       |
| iddashboard | int(11)      | NO   | PRI | NULL    |       |
| name        | varchar(100) | YES  |     | NULL    |       |
| layout      | text         | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

La deuxième étape est un peu plus compliquée car il faut mettre à jour les données. La requête suivante est utilisée afin de récupérer les données de la colonne layout de la table piwik_user_dashboard. Ces données sont modifiées pour remplacer la chaîne \" par ". Or dans le cadre de cette utilisation, cela n'a pas été nécessaire.

Bug-icon.png Bug widgets

Après la correction de la structure de la base de données, il était possible de se connecter. Cependant des erreurs continuaient d'être affichées sur la page d'accueil de Piwik.


Widget Graphique des dernières visites

Backtrace:
#0 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES piw...')
#1 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES piw...')
#2 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('piwik_archive_n...', 'piwik_archive_n...')
#3 /var/opt/piwik-1.8/core/ArchiveProcessing.php(688): Piwik_LockTables('piwik_archive_n...', 'piwik_archive_n...')
#4 /var/opt/piwik-1.8/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive()
#5 /var/opt/piwik-1.8/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute()
#6 /var/opt/piwik-1.8/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving()
#7 /var/opt/piwik-1.8/core/Archive/Array/IndexedByDate.php(90): Piwik_Archive_Single->prepareArchive()
#8 /var/opt/piwik-1.8/plugins/VisitsSummary/API.php(88): Piwik_Archive_Array_IndexedByDate->getDataTableFromNumeric(Array)
#9 [internal function]: Piwik_VisitsSummary_API->get('1', 'day', '2012-05-04,2012...', false, 'nb_visits')
#10 /var/opt/piwik-1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array)
#11 /var/opt/piwik-1.8/plugins/API/API.php(986): Piwik_API_Proxy->call('Piwik_VisitsSum...', 'get', Array)
#12 [internal function]: Piwik_API_API->get('1', 'day', '2012-05-04,2012...', false, 'nb_visits')
#13 /var/opt/piwik-1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array)
#14 /var/opt/piwik-1.8/core/API/Request.php(128): Piwik_API_Proxy->call('Piwik_API_API', 'get', Array)
#15 /var/opt/piwik-1.8/core/ViewDataTable.php(421): Piwik_API_Request->process()
#16 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphData/ChartEvolution.php(109): Piwik_ViewDataTable->loadDataTableFromAPI()
#17 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphData.php(181): Piwik_ViewDataTable_GenerateGraphData_ChartEvolution->loadDataTableFromAPI()
#18 /var/opt/piwik-1.8/core/Controller.php(247): Piwik_ViewDataTable_GenerateGraphData->main()
#19 /var/opt/piwik-1.8/plugins/VisitsSummary/Controller.php(78): Piwik_Controller->getLastUnitGraphAcrossPlugins('VisitsSummary',
'getEvolutionGra...', Array, Array, 'Ceci est un ape...')
#20 [internal function]: Piwik_VisitsSummary_Controller->getEvolutionGraph()
#21 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#22 /var/opt/piwik-1.8/core/FrontController.php(159): Piwik_FrontController->dispatch('VisitsSummary', 'getEvolutionGra...', Array)
#23 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(170): Piwik_FrontController->fetchDispatch('VisitsSummary', 'getEvolutionGra...',
Array)
#24 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(125): Piwik_ViewDataTable_GenerateGraphHTML->getGraphData()
#25 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(109): Piwik_ViewDataTable_GenerateGraphHTML->buildView()
#26 /var/opt/piwik-1.8/core/Controller.php(247): Piwik_ViewDataTable_GenerateGraphHTML->main()
#27 /var/opt/piwik-1.8/plugins/VisitsSummary/Controller.php(78): Piwik_Controller->getLastUnitGraphAcrossPlugins('VisitsSummary',
'getEvolutionGra...', Array, Array, 'Ceci est un ape...')
#28 [internal function]: Piwik_VisitsSummary_Controller->getEvolutionGraph()
#29 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#30 /var/opt/piwik-1.8/index.php(53): Piwik_FrontController->dispatch()
#31 {main}

Widget Système d'exploitation

Backtrace:
#0 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES piw...')
#1 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES piw...')
#2 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('piwik_archive_n...', 'piwik_archive_n...')
#3 /var/opt/piwik-1.8/core/ArchiveProcessing.php(688): Piwik_LockTables('piwik_archive_n...', 'piwik_archive_n...')
#4 /var/opt/piwik-1.8/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive()
#5 /var/opt/piwik-1.8/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute()
#6 /var/opt/piwik-1.8/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving()
#7 /var/opt/piwik-1.8/core/Archive/Single.php(256): Piwik_Archive_Single->prepareArchive()
#8 /var/opt/piwik-1.8/core/Archive/Single.php(514): Piwik_Archive_Single->get('UserSettings_os', 'blob', NULL)
#9 /var/opt/piwik-1.8/plugins/UserSettings/API.php(40): Piwik_Archive_Single->getDataTable('UserSettings_os')
#10 /var/opt/piwik-1.8/plugins/UserSettings/API.php(62): Piwik_UserSettings_API->getDataTable('UserSettings_os', '1', 'day', 'today', false)
#11 [internal function]: Piwik_UserSettings_API->getOS('1', 'day', 'today', false, true)
#12 /var/opt/piwik-1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array)
#13 /var/opt/piwik-1.8/core/API/Request.php(128): Piwik_API_Proxy->call('Piwik_UserSetti...', 'getOS', Array)
#14 /var/opt/piwik-1.8/core/ViewDataTable.php(421): Piwik_API_Request->process()
#15 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphData.php(181): Piwik_ViewDataTable->loadDataTableFromAPI()
#16 /var/opt/piwik-1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphData->main()
#17 /var/opt/piwik-1.8/plugins/UserSettings/Controller.php(75):
Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphData_ChartPie), false)
#18 [internal function]: Piwik_UserSettings_Controller->getOS()
#19 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#20 /var/opt/piwik-1.8/core/FrontController.php(159): Piwik_FrontController->dispatch('UserSettings', 'getOS', Array)
#21 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(170): Piwik_FrontController->fetchDispatch('UserSettings', 'getOS', Array)
#22 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(125): Piwik_ViewDataTable_GenerateGraphHTML->getGraphData()
#23 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(109): Piwik_ViewDataTable_GenerateGraphHTML->buildView()
#24 /var/opt/piwik-1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphHTML->main()
#25 /var/opt/piwik-1.8/plugins/UserSettings/Controller.php(75):
Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphHTML_ChartPie), false)
#26 [internal function]: Piwik_UserSettings_Controller->getOS()
#27 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#28 /var/opt/piwik-1.8/index.php(53): Piwik_FrontController->dispatch()
#29 {main}

Widget Visites par fuseau horaire du serveur

Backtrace:
#0 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES piw...')
#1 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES piw...')
#2 /var/opt/piwik-1.8/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('piwik_archive_n...', 'piwik_archive_n...')
#3 /var/opt/piwik-1.8/core/ArchiveProcessing.php(688): Piwik_LockTables('piwik_archive_n...', 'piwik_archive_n...')
#4 /var/opt/piwik-1.8/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive()
#5 /var/opt/piwik-1.8/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute()
#6 /var/opt/piwik-1.8/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving()
#7 /var/opt/piwik-1.8/core/Archive/Single.php(256): Piwik_Archive_Single->prepareArchive()
#8 /var/opt/piwik-1.8/core/Archive/Single.php(514): Piwik_Archive_Single->get('VisitTime_serve...', 'blob', NULL)
#9 /var/opt/piwik-1.8/plugins/VisitTime/API.php(34): Piwik_Archive_Single->getDataTable('VisitTime_serve...')
#10 /var/opt/piwik-1.8/plugins/VisitTime/API.php(48): Piwik_VisitTime_API->getDataTable('VisitTime_serve...', '1', 'day', 'today', false)
#11 [internal function]: Piwik_VisitTime_API->getVisitInformationPerServerTime('1', 'day', 'today', false, '1')
#12 /var/opt/piwik-1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array)
#13 /var/opt/piwik-1.8/core/API/Request.php(128): Piwik_API_Proxy->call('Piwik_VisitTime...', 'getVisitInforma...', Array)
#14 /var/opt/piwik-1.8/core/ViewDataTable.php(421): Piwik_API_Request->process()
#15 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphData.php(181): Piwik_ViewDataTable->loadDataTableFromAPI()
#16 /var/opt/piwik-1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphData->main()
#17 /var/opt/piwik-1.8/plugins/VisitTime/Controller.php(35): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphData_ChartPie),
false)
#18 [internal function]: Piwik_VisitTime_Controller->getVisitInformationPerServerTime()
#19 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#20 /var/opt/piwik-1.8/core/FrontController.php(159): Piwik_FrontController->dispatch('VisitTime', 'getVisitInforma...', Array)
#21 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(170): Piwik_FrontController->fetchDispatch('VisitTime', 'getVisitInforma...', Array)
#22 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(125): Piwik_ViewDataTable_GenerateGraphHTML->getGraphData()
#23 /var/opt/piwik-1.8/core/ViewDataTable/GenerateGraphHTML.php(109): Piwik_ViewDataTable_GenerateGraphHTML->buildView()
#24 /var/opt/piwik-1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphHTML->main()
#25 /var/opt/piwik-1.8/plugins/VisitTime/Controller.php(35): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphHTML_ChartPie),
false)
#26 [internal function]: Piwik_VisitTime_Controller->getVisitInformationPerServerTime()
#27 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#28 /var/opt/piwik-1.8/index.php(53): Piwik_FrontController->dispatch()
#29 {main}

Widget Durée des visites

Backtrace:
#0 /var/opt/piwik-1.8/core/ViewDataTable/Cloud.php(74): Piwik_ViewDataTable->checkStandardDataTable()
#1 /var/opt/piwik-1.8/core/Controller.php(152): Piwik_ViewDataTable_Cloud->main()
#2 /var/opt/piwik-1.8/plugins/VisitorInterest/Controller.php(42): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_Cloud), false)
#3 [internal function]: Piwik_VisitorInterest_Controller->getNumberOfVisitsPerVisitDuration()
#4 /var/opt/piwik-1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#5 /var/opt/piwik-1.8/index.php(53): Piwik_FrontController->dispatch()
#6 {main}

Correction

Pour les trois premiers messages, l'erreur est commune et concerne l'impossibilité de vérrouiller une table dans la base de données. En effet, cette permission n'a pas été accordé au compte lors de l'installation initiale.

L'ajout de cette permission permet de résoudre les quatre problèmes d'un coup.

 mysql> GRANT LOCK TABLES ON piwik.* TO 'piwik'@'localhost';
 Query OK, 0 rows affected (0.07 sec)


Bug-icon.png Label sur locale Française

Lors de l'installation initiale, des erreurs ont été constatés dans les messages. Certains ont été corrigés mais pas tous. Le message Le mot clef %1$s a été a été noté %2$s dans la page de résultats de recherche %3$s pour ce visiteur est toujours erroné.

Tous les messages sont externalisés dans des dictionnaires de langue, placés dans le sous répertoire lang de l'installation. Dans le cas de la locale Française, le fichier modifié est fr.php.

Patch des traductions: fr.php

Voir aussi

Procédure officielle de mise à jour: http://piwik.org/update

Changelog: http://piwik.org/changelog/piwik-1-8/