dbarzin / mercator

Mapping the information system / Cartographie du système d'information
GNU General Public License v3.0
278 stars 44 forks source link

Undefined property: stdClass::$icon_id à la création d'une entité #971

Open lgromb opened 1 week ago

lgromb commented 1 week ago

Hello,

Tout ce qui semble faire appel à icon_id tombe en 500, probablement du à cette migration en échec au start du docker :

mercator-6b585f5948-lqrqw:mercator 2024/11/20 13:08:53 [notice] 8#8: start worker process 19
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator    INFO  Running migrations.
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator   2024_09_24_044657_move_icons_to_docs ........................... 6.14ms FAIL
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator    Illuminate\Database\QueryException
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator   SQLSTATE[HY000]: General error: 1 duplicate column name: icon_id (Connection: sqlite, SQL: alter table "m_applications" add column "icon_id" integer)
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator   at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
mercator-6b585f5948-lqrqw:mercator     821▕                     $this->getName(), $query, $this->prepareBindings($bindings), $e
mercator-6b585f5948-lqrqw:mercator     822▕                 );
mercator-6b585f5948-lqrqw:mercator     823▕             }
mercator-6b585f5948-lqrqw:mercator     824▕
mercator-6b585f5948-lqrqw:mercator   ➜ 825▕             throw new QueryException(
mercator-6b585f5948-lqrqw:mercator     826▕                 $this->getName(), $query, $this->prepareBindings($bindings), $e
mercator-6b585f5948-lqrqw:mercator     827▕             );
mercator-6b585f5948-lqrqw:mercator     828▕         }
mercator-6b585f5948-lqrqw:mercator     829▕     }
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator       +9 vendor frames
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator   10  database/migrations/2024_09_24_044657_move_icons_to_docs.php:19
mercator-6b585f5948-lqrqw:mercator       Illuminate\Support\Facades\Facade::__callStatic("table")
mercator-6b585f5948-lqrqw:mercator       +25 vendor frames
mercator-6b585f5948-lqrqw:mercator
mercator-6b585f5948-lqrqw:mercator   36  artisan:35
mercator-6b585f5948-lqrqw:mercator       Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

La base est en sqlite, une idée de comment réparer ça ?

Merci,

lgromb commented 1 week ago

Après vérification, la colonne existe déjà :

sqlite> PRAGMA table_info(m_applications);
0|id|INTEGER|1||1
1|name|varchar(255)|1||0
2|description|clob|0|NULL|0
3|security_need_c|INTEGER|0|NULL|0
4|responsible|varchar(255)|0|NULL|0
5|type|varchar(255)|0|NULL|0
6|technology|varchar(255)|0|NULL|0
7|external|varchar(255)|0|NULL|0
8|users|varchar(255)|0|NULL|0
9|created_at|datetime|0|NULL|0
10|updated_at|datetime|0|NULL|0
11|deleted_at|datetime|0|NULL|0
12|entity_resp_id|INTEGER|0|NULL|0
13|application_block_id|INTEGER|0|NULL|0
14|documentation|varchar(255)|0|NULL|0
15|security_need_i|INTEGER|0|NULL|0
16|security_need_a|INTEGER|0|NULL|0
17|security_need_t|INTEGER|0|NULL|0
18|version|varchar(255)|0|NULL|0
19|functional_referent|varchar(255)|0|NULL|0
20|editor|varchar(255)|0|NULL|0
21|install_date|datetime|0|NULL|0
22|update_date|datetime|0|NULL|0
23|rto|INTEGER|0|NULL|0
24|rpo|INTEGER|0|NULL|0
25|vendor|varchar(255)|0|NULL|0
26|product|varchar(255)|0|NULL|0
27|attributes|varchar(255)|0|NULL|0
28|patching_frequency|INTEGER|0|NULL|0
29|next_update|date|0|NULL|0
30|icon|TEXT|0||0
31|icon_id|INTEGER|0||0

Est-ce qu'il suffit juste de la supprimer ?

Merci,

dbarzin commented 1 week ago

Il semble que cette migration ait déjà été exécutée, mais elle n'est pas notée dans la table migrations. Le plus simple est de mettre le code de la méthode up qui se trouve dans database/migrations/2024_09_24_044657_move_icons_to_docs.php en commentaire et de relancer la migration de la db avec la commande php artisan migrate jusqu'à stabilisation.

lgromb commented 1 week ago

J'ai fait, la migration est passée et il semble avoir un pb similaire sur la suivante :

mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator    INFO  Running migrations.
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator   2024_09_24_084005_move_icons_to_docs .......................... 11.60ms FAIL
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator    Illuminate\Database\QueryException
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator   SQLSTATE[HY000]: General error: 1 error in index entity_id_fk_1295034 after drop column: no such column: entity_id (Connection: sqlite, SQL: alter table "workstations" drop column "icon")
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator   at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
mercator-6b585f5948-94j6b:mercator     821▕                     $this->getName(), $query, $this->prepareBindings($bindings), $e
mercator-6b585f5948-94j6b:mercator     822▕                 );
mercator-6b585f5948-94j6b:mercator     823▕             }
mercator-6b585f5948-94j6b:mercator     824▕
mercator-6b585f5948-94j6b:mercator   ➜ 825▕             throw new QueryException(
mercator-6b585f5948-94j6b:mercator     826▕                 $this->getName(), $query, $this->prepareBindings($bindings), $e
mercator-6b585f5948-94j6b:mercator     827▕             );
mercator-6b585f5948-94j6b:mercator     828▕         }
mercator-6b585f5948-94j6b:mercator     829▕     }
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator       +9 vendor frames
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator   10  database/migrations/2024_09_24_084005_move_icons_to_docs.php:14
mercator-6b585f5948-94j6b:mercator       Illuminate\Support\Facades\Facade::__callStatic("table")
mercator-6b585f5948-94j6b:mercator       +25 vendor frames
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator   36  artisan:35
mercator-6b585f5948-94j6b:mercator       Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
mercator-6b585f5948-94j6b:mercator
mercator-6b585f5948-94j6b:mercator 2024-11-20 13:47:40,106 WARN exited: migrate (exit status 0; not expected)
mercator-6b585f5948-94j6b:mercator 2024-11-20 13:47:41,108 INFO gave up: migrate entered FATAL state, too many start retries too quickly
mercator-6b585f5948-94j6b:mercator 2024-11-20 13:47:41,109 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
mercator-6b585f5948-94j6b:mercator 2024-11-20 13:47:41,109 INFO success: php entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

et les colonnes associées de workstations :

sqlite> PRAGMA table_info(workstations);
0|id|INTEGER|1||1
1|name|varchar|1||0
2|description|TEXT|0||0
3|created_at|datetime|0||0
4|updated_at|datetime|0||0
5|deleted_at|datetime|0||0
6|site_id|INTEGER|0||0
7|building_id|INTEGER|0||0
8|physical_switch_id|INTEGER|0||0
9|type|varchar|0||0
10|operating_system|varchar|0||0
11|address_ip|varchar|0||0
12|cpu|varchar|0||0
13|memory|varchar|0||0
14|disk|INTEGER|0||0
15|vendor|varchar|0||0
16|product|varchar|0||0
17|version|varchar|0||0
18|icon|TEXT|0||0
dbarzin commented 1 week ago

Relancer la migration de la db avec la commande php artisan migrate et recommencer la mise en commentaire jusqu'à stabilisation.

lgromb commented 1 week ago

Ok @dbarzin mais la je comprends (moi qui ne suis pas développeur), qu'il manque quelque chose lorsque j'essaie de créer une entité. Commenter l'ensemble des migrations fera effectivement passer l'erreur du migrate, mais cela ne va pas pour autant modifier la structure des données comme l'attend l'application ?

Ma question d'origine reste valable à savoir :

Comment fix ce problème qui s'affiche lorsque je clique sur "Ajouter Entité" dans Ecosystème : image

dbarzin commented 1 week ago

Toutes les migrations ont-elles été exécutées ? Ce champ icon_id se trouve dans une migration qui n'a pas été exécutée.

dbarzin commented 6 days ago

Je soupçonne que tu as restauré la DB d'une version n de l'application sur une version n+x d'une autre version de l'application sans les modifications de table. Au lancement, l'application croit que la base de données n'a pas été migrée, car la liste des migrations effectuées se trouve dans la table migration et essaye de les exécuter, mais sans succès parce qu'elles ont déjà été exécutées sur cette base de données. Lors du backup de la base de données de Mercator, il faut inclure les créations de tables pour que la nouvelle version de l'application puisse migrer le schéma de base de données.