Error 1: Registro con llave duplicada
Mensaje:
Upgrade failed: DB: Duplicate entry '25578-3-1' for key 'review_rounds_submission_id_stage_id_round_pkey
Solución: Primero revisar que registros duplicados existen en la base de datos, mediante la siguiente query.
SELECT rr.submission_id, rr.review_round_id
FROM review_rounds as rr
WHERE rr.review_round_id NOT IN
(SELECT MIN(rrr.review_round_id) FROM review_rounds as rrr GROUP BY rrr.submission_id, rrr.round);
Ejemplo:
+---------------+-----------------+
| submission_id | review_round_id |
+---------------+-----------------+
| 26116 | 8062 |
| 26116 | 8063 |
| 26116 | 8064 |
| 26116 | 8065 |
| 26116 | 8066 |
| 26116 | 8067 |
| 26116 | 8068 |
| 26116 | 8069 |
| 27681 | 9315 |
| 27681 | 9316 |
| 27681 | 9317 |
| 27681 | 9318 |
Después borrar todos aquellos registros resultantes:
DELETE FROM review_rounds WHERE submission_id=26116 AND review_round_id
IN (8062,8063,8064,8065,8066,8067,8068,8069);
DELETE FROM review_rounds WHERE submission_id=27681 AND review_round_id
IN (9315,9316,9317,9318);
Error 2: Ejecutando la función getStatus() sobre un valor NULL
Mensaje:
PHP Fatal error: Call to a member function getStatus() on null in
/var/www/html/ojs/classes/install/Upgrade.inc.php on line 1369
Solución: Este error parece ser provocado porque existen registros en la tabla articles
, para los cuales la columna section_id
es NULL o tiene el valor 0. Debido que mi OJS aloja multiples revistas, debo saber para que revistas esta pasando esta situación, ejecutar la siguiente Query:
SELECT DISTINCT journal_id
FROM articles WHERE section_id is NULL OR section_id=0
ORDER BY journal_id;
Ejemplo
+------------+
| journal_id |
+------------+
| 6 |
| 9 |
+------------+
En este ejemplo tengos 2 diferentes revistas, he decido asginar la sección articles, la cual viene por default al crear una revista, a todos aquellos registros que están causando el problema.
SELECT ss.section_id, ss.setting_name, ss.setting_value
FROM section_settings ss
WHERE ss.section_id IN (SELECT section_id FROM sections WHERE journal_id=6)
AND setting_name='title';
journal_id | section_id | setting_name | setting_value |
6 | 7 | title | ARTICULOS |
SELECT ss.section_id, ss.setting_name, ss.setting_value
FROM section_settings ss
WHERE ss.section_id IN (SELECT section_id FROM sections WHERE journal_id=9)
AND setting_name='title';
journal_id | section_id | setting_name | setting_value |
9 | 1208 | title | Artículos |
Sabiendo cuál es el valor de la columna section_id para la sección artículos, para cada una de las revistas, ejecutar las siguientes queries:
UPDATE articles SET section_id=7 WHERE journal_id=6 and (section_id is NULL or section_id=0);
UPDATE articles SET section_id=1208 WHERE journal_id=9 and (section_id is NULL or section_id=0);
Error 3: Ejecutando funcion getId() sobre un valor NULL
Mensaje:
Fatal error: Call to a member function getId() on null in /var/www/html/ojs/classes/install/Upgrade.inc.php on line 1071
Solución: Revisar en el OJS con multiples revistas, si existen revistas que pudieran no tener un usuario con el rol de gestor. Ejecutar la siguiente Query:
SELECT j.journal_id FROM journals j
LEFT JOIN roles r ON (r.role_id=16 AND r.journal_id=j.journal_id) WHERE r.role_id IS NULL;
Ejemplo:
+------------+------+-----+----------------+---------+
| journal_id | path | seq | primary_locale | enabled |
+------------+------+-----+----------------+---------+
| 37 | rfm | 93 | es_ES | 1 |
+------------+------+-----+----------------+---------+
Para este caso particular, la revista con path rfm
, parece no tener un usuario con rol de gestor. La solución sería mediante la interfaz gráfica utilizando el usuario administrador del OJS, agregar un usuario con el rol de gestor.