Erreur Bootstrap avec le plugin ai, bundle exec rake db:migrate

Je rencontre une erreur de bootstrap sur la version actuelle 3.5.0.beta7-dev dès que j’inclus le plugin AI dans une configuration de conteneur web_only. La même construction fonctionne bien sans ce plugin.

D’après la lecture de Upgrade Error - rake db:migrate index on theme_field_id - #7 by pfaffman, je suspecte que la cause première est une extension manquante sur le serveur postgres (externe) 13.20. Le serveur possède les extensions hstore, pg_trgm, plpgsql, unaccent et est également utilisé pour une installation productive de discourse qui utilise le même code, mais sans le plugin AI pour le moment.

Quelqu’un peut-il identifier les extensions postgres requises pour le plugin AI ? Je n’ai pas trouvé cette information dans le Guide d’auto-hébergement de Discourse AI. Des rapports de bugs similaires tels que AI Plugin Build Error - 'bundle exec rake db:migrate' failed utilisent un scénario différent et peuvent ne pas être liés à mon cas d’utilisation opérationnel ici…

Parties pertinentes de web_only.yaml

templates:
 - "templates/web.template.yml"
 ## Décommentez la ligne suivante pour activer l'écoute IPv6
 #- "templates/web.ipv6.template.yml"
 - "templates/web.ratelimited.template.yml"
 - "templates/web.socketed.template.yml"
 ## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
 #- "templates/web.ssl.template.yml"
 #- "templates/web.letsencrypt.ssl.template.yml"

[...]

## configurer la connectivité aux bases de données
 DISCOURSE_DB_SOCKET: ''
 DISCOURSE_DB_USERNAME: discourse2
 DISCOURSE_DB_NAME: discourse2
 DISCOURSE_DB_PASSWORD: xxx
 DISCOURSE_DB_HOST: 10.10.10.xx
# mise en cache redis sur le conteneur voisin
 DISCOURSE_REDIS_HOST: redis

[...]

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour les détails
hooks:
 after_code:
   - exec:
       cd: $home/plugins
       cmd:
         - git clone https://github.com/discourse/docker_manager.git
         - git clone https://github.com/discourse/discourse-shared-edits.git
         - git clone https://github.com/discourse/discourse-chat-integration.git
         - git clone https://github.com/discourse/discourse-openid-connect.git
         - git clone https://github.com/discourse/discourse-calendar.git
         - git clone https://github.com/angusmcleod/discourse-events.git
         - git clone https://github.com/discourse/discourse-data-explorer.git
         - git clone https://github.com/discourse/discourse-reactions.git
         - git clone https://github.com/discourse/discourse-chat.git
         - git clone https://github.com/discourse/discourse-ai.git
         - git clone https://github.com/discourse/discourse-topic-voting.git
         - git clone https://github.com/discourse/discourse-post-voting.git
         - git clone https://github.com/discourse/discourse-user-notes.git
         - git clone https://github.com/discourse/discourse-solved.git
         - git clone https://github.com/discourse/discourse-docs-card-filter.git
         - git clone https://github.com/discourse/discourse-doc-categories.git
         - git clone https://github.com/discourse/discourse-assign.git
         - git clone https://github.com/discourse/discourse-templates.git
         - git clone https://github.com/discourse/discourse-saved-searches.git
         - git clone https://github.com/discourse/discourse-tooltips.git
         - git clone https://github.com/discourse/discourse-category-experts.git
         - git clone https://github.com/discourse/discourse-activity-pub.git
         - git clone https://github.com/discourse/discourse-follow.git
         - git clone https://github.com/nathan-nz/discourse-wikified-posts.git
         - git clone https://github.com/discourse/discourse-whos-online.git
         - git clone https://github.com/merefield/discourse-workflow.git
[...]

## pour le fonctionnement derrière un équilibreur de charge haproxy avec nginx local sur l'hôte du conteneur
 - replace:
     filename: /etc/nginx/conf.d/discourse.conf
     from: "types {"
     to: |
       set_real_ip_from 127.0.0.1/24;
       set_real_ip_from 10.0.0.0/24;
       real_ip_header X-Forwarded-For;
       real_ip_recursive on;
       proxy_set_header Host $http_host;
       proxy_set_header X-Request-Start “t=${msec}”;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto https; # remplacé $thescheme;
       proxy_set_header X-Real-IP $remote_addr;
       types {
[...]

sudo docker logs -t --tail 1000 web_only

gem install ice_cube -v 0.16.4 -i /var/www/discourse/plugins/discourse-events/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed ice_cube-0.16.4
1 gem installed
gem install icalendar -v 2.8.0 -i /var/www/discourse/plugins/discourse-events/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
ActiveSupport is required for TimeWithZone support, but not required for general use.
Successfully installed icalendar-2.8.0
1 gem installed
gem install icalendar-recurrence -v 1.1.3 -i /var/www/discourse/plugins/discourse-events/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed icalendar-recurrence-1.1.3
1 gem installed
gem install multipart-post -v 2.4.0 -i /var/www/discourse/plugins/discourse-workflow/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed multipart-post-2.4.0
1 gem installed
gem install faraday-multipart -v 1.0.4 -i /var/www/discourse/plugins/discourse-workflow/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed faraday-multipart-1.0.4
1 gem installed
gem install event_stream_parser -v 1.0.0 -i /var/www/discourse/plugins/discourse-workflow/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed event_stream_parser-1.0.0
1 gem installed
gem install ruby-openai -v 8.1.0 -i /var/www/discourse/plugins/discourse-workflow/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed ruby-openai-8.1.0
1 gem installed
== 20230710171141 EnablePgVectorExtension: migrating ==========================
-- enable_extension(:vector)


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 3914 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
3fac1371a3dd8b0d59760e492965c1d7ebb8a09e99549a9483596453f95ce871

Vous avez besoin de GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres

1 « J'aime »

Oui, merci, c’était ça, le bootstrap a maintenant réussi. Peut-être que cette information devrait être ajoutée au guide d’auto-hébergement de l’IA…

Je pensais que le plugin devrait effectuer cette étape de base lors de la migration. Je suis surpris que ce soit à l’utilisateur de l’exécuter. Malheureusement, nous utilisons le graphique bitnami, je n’ai pas beaucoup de contrôle sur l’exécution de cette extension, via le graphique. Je détesterais le faire manuellement, mais il semble que ce soit la voie à suivre.

J’aimerais comprendre pourquoi le plugin ne l’ajoute pas dans son script de migration ? Y avait-il une raison spécifique ?

Dans mon cas, la partie base de données de Discourse est située sur un serveur externe et ne fait pas partie du package standard des conteneurs Discourse. L’extension vectorielle doit être installée avec des permissions différentes par rapport à l’utilisateur de la base de données pour Discourse. Par conséquent, l’installation a dû être effectuée manuellement, et non comme une étape du processus d’amorçage.

C’est vrai. Voici ce qui a fonctionné pour moi.

  • Utilisation du chart Bitnami Discourse
  • Substitution du Dockerfile pour Bitnami PostgreSQL et installation de Vector en tant que root
  • Au démarrage de PostgreSQL, exécution d’un script d’initialisation pour faire de l’utilisateur discourse le propriétaire de Vector
  • Le reste (y compris l’installation du plugin) est géré par le chart Bitnami

J’ai appris cela à mes dépens. J’aurais aimé qu’il y ait de la documentation à ce sujet. La documentation du plugin devrait mentionner certaines prérequis.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.