Errores comunes al actualizar OJS desde la versión 2.x a la versión 3.2.x

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.

1 Like