# Incompatibilité entre les plugins Cakeday, Data-Explorer et Animated Avatar

**URL:** https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255
**Category:** Bug
**Created:** [Décembre 31, 2022, 9:43 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255 "2022-12-31T09:43:44Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [Décembre 31, 2022, 9:43 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255/1 "2022-12-31T09:43:44Z")

</div>

> [@Discourse Cakeday](https://meta.discourse.org/t/discourse-cakeday-celebrating-birthdays-and-anniversaries/38447):
>
> discourse2Summary Discourse Cakeday decorates user avatars with a celebratory emoji on the anniversary of their joining day, and (optionally) on their birthday too. cake birthdayopen_bookInstall Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately. Enabling Cakeday The Cakeday plugin is default enabled but can be disabled/enabled from its settings, accessed from your admin/plugins page: [Cakeday settings] Features Emoj…

> [@Animated Avatar](https://meta.discourse.org/t/animated-avatar-plugin/220445):
>
> information_sourceSummary Discourse Animated Avatars adds the ability for users to upload gif avatars which will animate on hover or selection in posts, user cards, and profile pages.hammer_and_wrenchRepository Link [https://github.com/discourse/discourse-animated-avatars](https://github.com/discourse/discourse-animated-avatars)open_bookInstall Guide [How to install plugins in Discourse](https://meta.discourse.org/t/install-plugins-in-discourse/19157)Features By default, this pauses animation when not focused. Within topics, animation will pause when post is not hovered or selected. anima…

J’ai installé ces deux plugins.  
L’URL pour voir les anniversaires (/cakeday/anniversaries/today) renvoie cette erreur :

 ![image](https://global.discourse-cdn.com/meta/original/4X/d/7/3/d738166ef7e89040c9afb7e7c5dcbd28b8bf6161.png)

> **Journaux complets :**
>
> ```plaintext
> activemodel (7.0.3.1) lib/active_model/attribute.rb:226:in `value'
> activemodel (7.0.3.1) lib/active_model/attribute_set/builder.rb:55:in `block in fetch_value'
> activemodel (7.0.3.1) lib/active_model/attribute_set/builder.rb:46:in `fetch'
> activemodel (7.0.3.1) lib/active_model/attribute_set/builder.rb:46:in `fetch_value'
> activerecord (7.0.3.1) lib/active_record/attribute_methods/read.rb:38:in `_read_attribute'
> activemodel (7.0.3.1) lib/active_model/attribute_methods.rb:277:in `admin'
> app/models/concerns/roleable.rb:14:in `staff?'
> plugins/discourse-animated-avatars/plugin.rb:90:in `block (2 levels) in activate!'
> lib/plugin/instance.rb:285:in `public_send'
> lib/plugin/instance.rb:285:in `block (2 levels) in add_to_class'
> activesupport (7.0.3.1) lib/active_support/core_ext/object/try.rb:15:in `public_send'
> activesupport (7.0.3.1) lib/active_support/core_ext/object/try.rb:15:in `try'
> plugins/discourse-animated-avatars/plugin.rb:94:in `block (2 levels) in activate!'
> (eval):7:in `_fast_attributes'
> active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
> active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
> active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
> active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
> active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
> active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
> active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'
> active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'
> active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:53:in `as_json'
> app/controllers/application_controller.rb:519:in `serialize_data'
> plugins/discourse-cakeday/app/controllers/discourse_cakeday/anniversaries_controller.rb:53:in `index'
> actionpack (7.0.3.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
> actionpack (7.0.3.1) lib/abstract_controller/base.rb:215:in `process_action'
> actionpack (7.0.3.1) lib/action_controller/metal/rendering.rb:53:in `process_action'
> actionpack (7.0.3.1) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
> activesupport (7.0.3.1) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
> app/controllers/application_controller.rb:413:in `block in with_resolved_locale'
> i18n (1.12.0) lib/i18n.rb:322:in `with_locale'
> app/controllers/application_controller.rb:413:in `with_resolved_locale'
> activesupport (7.0.3.1) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
> activesupport (7.0.3.1) lib/active_support/callbacks.rb:138:in `run_callbacks'
> actionpack (7.0.3.1) lib/abstract_controller/callbacks.rb:233:in `process_action'
> actionpack (7.0.3.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
> actionpack (7.0.3.1) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
> activesupport (7.0.3.1) lib/active_support/notifications.rb:206:in `block in instrument'
> activesupport (7.0.3.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
> activesupport (7.0.3.1) lib/active_support/notifications.rb:206:in `instrument'
> actionpack (7.0.3.1) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
> actionpack (7.0.3.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
> activerecord (7.0.3.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
> actionpack (7.0.3.1) lib/abstract_controller/base.rb:151:in `process'
> actionview (7.0.3.1) lib/action_view/rendering.rb:39:in `process'
> rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method'
> actionpack (7.0.3.1) lib/action_controller/metal.rb:188:in `dispatch'
> actionpack (7.0.3.1) lib/action_controller/metal.rb:251:in `dispatch'
> actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
> actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'
> actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
> actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:32:in `each'
> actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:32:in `serve'
> actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:852:in `call'
> railties (7.0.3.1) lib/rails/engine.rb:530:in `call'
> railties (7.0.3.1) lib/rails/railtie.rb:226:in `public_send'
> railties (7.0.3.1) lib/rails/railtie.rb:226:in `method_missing'
> actionpack (7.0.3.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
> actionpack (7.0.3.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
> actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
> actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:32:in `each'
> actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:32:in `serve'
> actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:852:in `call'
> lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
> rack (2.2.4) lib/rack/tempfile_reaper.rb:15:in `call'
> rack (2.2.4) lib/rack/conditional_get.rb:27:in `call'
> rack (2.2.4) lib/rack/head.rb:12:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
> lib/content_security_policy/middleware.rb:12:in `call'
> rack (2.2.4) lib/rack/session/abstract/id.rb:266:in `context'
> rack (2.2.4) lib/rack/session/abstract/id.rb:260:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/cookies.rb:697:in `call'
> activerecord (7.0.3.1) lib/active_record/migration.rb:603:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
> activesupport (7.0.3.1) lib/active_support/callbacks.rb:99:in `run_callbacks'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'
> logster (2.11.3) lib/logster/middleware/reporter.rb:43:in `call'
> railties (7.0.3.1) lib/rails/rack/logger.rb:40:in `call_app'
> railties (7.0.3.1) lib/rails/rack/logger.rb:27:in `call'
> config/initializers/100-quiet_logger.rb:23:in `call'
> config/initializers/100-silence_logger.rb:31:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
> rack (2.2.4) lib/rack/method_override.rb:24:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/static.rb:23:in `call'
> rack (2.2.4) lib/rack/sendfile.rb:110:in `call'
> actionpack (7.0.3.1) lib/action_dispatch/middleware/host_authorization.rb:137:in `call'
> lib/middleware/missing_avatars.rb:23:in `call'
> lib/middleware/turbo_dev.rb:34:in `call'
> rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:393:in `call'
> message_bus (4.3.0) lib/message_bus/rack/middleware.rb:60:in `call'
> railties (7.0.3.1) lib/rails/engine.rb:530:in `call'
> railties (7.0.3.1) lib/rails/railtie.rb:226:in `public_send'
> railties (7.0.3.1) lib/rails/railtie.rb:226:in `method_missing'
> rack (2.2.4) lib/rack/urlmap.rb:74:in `block in call'
> rack (2.2.4) lib/rack/urlmap.rb:58:in `each'
> rack (2.2.4) lib/rack/urlmap.rb:58:in `call'
> unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
> unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
> unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
> unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
> unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
> bin/unicorn:96:in `load'
> bin/unicorn:96:in `block in <main>'
> bin/unicorn:95:in `fork'
> bin/unicorn:95:in `<main>'
> 
> ```

J’ai essayé d’analyser le problème exact. Pour moi, les lignes les plus pertinentes sont ici :

```plaintext
app/models/concerns/roleable.rb:14:in `staff?'
plugins/discourse-animated-avatars/plugin.rb:90:in `block (2 levels) in activate!'
...
plugins/discourse-animated-avatars/plugin.rb:94:in `block (2 levels) in activate!'
...
app/controllers/application_controller.rb:519:in `serialize_data'
plugins/discourse-cakeday/app/controllers/discourse_cakeday/anniversaries_controller.rb:53:in `index'

```

Le problème semble être que, lorsque la fonction « staff? » est appelée, cette fonction n’existe pas pour l’objet utilisateur concerné ici, ce qui provoque une erreur dans le plugin Animated Avatar :

> <https://github.com/discourse/discourse-animated-avatars/blob/main/plugin.rb#L90>

Cela remonte au plugin Cakeday, lors de la sérialisation de la liste des utilisateurs :

> <https://github.com/discourse/discourse-cakeday/blob/main/app/controllers/discourse_cakeday/anniversaries_controller.rb#L53>

Maintenant, je ne suis pas expert du fonctionnement de la sérialisation ici, mais si je devais donner un diagnostic vague, il semblerait que le plugin Animated Avatar reçoive un objet « user » qui manque de certaines propriétés attendues d’un objet utilisateur, à savoir la fonction staff? (ainsi que trust\_level que j’ai découverte). Je pense qu’il pourrait être un peu difficile de reproduire cette erreur, car il faut apparemment qu’il y ait des utilisateurs affichés sur la page /cakeday/anniversaries/today, ce qui n’était pas trivial à obtenir sur mon instance de développement.

Sur mon forum en direct, j’ai également confirmé que ce problème persiste même en mode sécurisé (plugins officiels uniquement).

Un problème similaire est signalé ici : [Discourse Cakeday - #200](https://meta.discourse.org/t/discourse-cakeday-celebrating-birthdays-and-anniversaries/38447/200?u=scottmastro)

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [Janvier 11, 2023, 1:03 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255/3 "2023-01-11T13:03:03Z")

</div>

Salut @piffy 🙂

Pour information, j’ai installé Animated Avatars sur mon site de test (ainsi que Cakeday 🍰), et je pense pouvoir reproduire cette erreur. 👍

- Installer et activer les deux plugins
- Utiliser du code astucieux dans la console Rails [^1] pour définir la date de création de l’utilisateur de test il y a un an aujourd’hui
- Accéder à `/cakeday/anniversaries/today`
- Erreur 500

```plaintext
Message (4 copies signalées)

ActiveModel::MissingAttributeError (attribut manquant : admin)
app/models/concerns/roleable.rb:14:in `staff?'
lib/plugin/instance.rb:297:in `public_send'
lib/plugin/instance.rb:297:in `block (2 levels) in add_to_class'
(eval):8:in `_fast_attributes'
app/controllers/application_controller.rb:521:in `serialize_data'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:366:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

activemodel (7.0.3.1) lib/active_model/attribute.rb:226:in `value'
activemodel (7.0.3.1) lib/active_model/attribute_set/builder.rb:43:in `fetch_value'
activerecord (7.0.3.1) lib/active_record/attribute_methods/read.rb:38:in `_read_attribute'
activemodel (7.0.3.1) lib/active_model/attribute_methods.rb:277:in `admin'
app/models/concerns/roleable.rb:14:in `staff?'
plugins/discourse-animated-avatars/plugin.rb:90:in `block (2 levels) in activate!'
lib/plugin/instance.rb:297:in `public_send'
lib/plugin/instance.rb:297:in `block (2 levels) in add_to_class'
activesupport (7.0.3.1) lib/active_support/core_ext/object/try.rb:15:in `public_send'
activesupport (7.0.3.1) lib/active_support/core_ext/object/try.rb:15:in `try'

```

Je pensais pouvoir essayer une méthode plus simple et faire la même chose pour les anniversaires afin d’éviter de tripoter la console Rails, mais `/cakeday/birthdays/today` semblait fonctionner correctement.

[^1] : user = User.where(username: ‘Test\_Three’)  
user.update(created\_at: “2022-01-11 00:00:00.00000”)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Janvier 11, 2023, 1:23 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255/4 "2023-01-11T13:23:50Z")

</div>

Cela semble également affecter data-explorer, voir

> [@Internal Server Error for some queries in data explorer plugin](https://meta.discourse.org/t/internal-server-error-for-some-queries-in-data-explorer-plugin/251410/5?u=david):
>
> FWIW I have just installed Animated Avatars to repro this bug - [Incompatibility between Cakeday and Animated Avatar plugins - #3 by JammyDodger](https://meta.discourse.org/t/incompatibility-between-cakeday-and-animated-avatar-plugins/250255/3) and I also cannot run the ‘Top 100 Likers’ query on my test site (but can here on Meta).

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [Janvier 12, 2023, 12:45 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255/8 "2023-01-12T00:45:22Z")

</div>

Salut @piffy, merci beaucoup pour ce rapport détaillé. J’ai mis à jour la compatibilité entre les plugins avec cette PR :

> <https://github.com/discourse/discourse-animated-avatars/pull/12>
>
> Fixes incompatibilities with other user serializers

Je peux accéder à la page du répertoire cakeday grâce à mes tests, mais fais-moi savoir s’il reste des problèmes.

---

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [Janvier 12, 2023, 3:14 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255/9 "2023-01-12T03:14:52Z")

</div>

Ça le corrige pour moi ! Merci beaucoup !!

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [Janvier 12, 2023, 3:34 UTC](https://meta.discourse.org/t/incompatibility-between-cakeday-data-explorer-and-animated-avatar-plugins/250255/10 "2023-01-12T03:34:31Z")

</div>


