Bootstrap error with ai plugin, bundle exec rake db:migrate

I am facing a bootstrap error on the current 3.5.0.beta7-dev as soon as I include the AI plugin into a web_only container setup. The same build works fine without this plugin.

From reading Upgrade Error - rake db:migrate index on theme_field_id - #7 by pfaffman I suspect that the root cause is a missing extension on the (external) postgres server 13.20. The server has the extensions hstore, pg_trgm, plpgsql, unaccent and is also used for a productive discourse installation which uses the same code, but without the AI plugin yet.

Can someone identify the required postgres extensions for the AI plugin? I could not find this info in the Discourse AI - Self-Hosted Guide . Similar bug postings such as AI Plugin Build Error - 'bundle exec rake db:migrate' failed use a different scenario and may not be related to my operational use case here …

Relevant parts of the web_only.yaml

templates:  
 - "templates/web.template.yml"  
 ## Uncomment the next line to enable the IPv6 listener  
 #- "templates/web.ipv6.template.yml"  
 - "templates/web.ratelimited.template.yml"  
 - "templates/web.socketed.template.yml"  
 ## Uncomment these two lines if you wish to add Lets Encrypt (https)  
 #- "templates/web.ssl.template.yml"  
 #- "templates/web.letsencrypt.ssl.template.yml"

[...]

## configure connectivity to the databases  
 DISCOURSE_DB_SOCKET: ''  
 DISCOURSE_DB_USERNAME: discourse2  
 DISCOURSE_DB_NAME: discourse2  
 DISCOURSE_DB_PASSWORD: xxx  
 DISCOURSE_DB_HOST: 10.10.10.xx
# redis caching on the neighbouring container  
 DISCOURSE_REDIS_HOST: redis

[...]

## Plugins go here  
## see https://meta.discourse.org/t/19157 for details  
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
[...]

## for operation behind haproxy load balancer with local nginx on the container host    
 - 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; # replaced $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

You need GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres

1 Like

Yep, thanks, this was it, bootstrap now successful. Maybe this info should be added to the AI self hosting guide …

I was thinking the plugin should do this basic step during migration. I am surprised it falls in the user to run it. Unfortunately we are using bitnami chart, I don’t have much control over running this extension, via chart. I would hate to do it manually, but looks like that is path forward.

I would like to understand why the plugin doesn’t add it in their migration script? Was there a specific reason?

In my case the database part of Discourse is located on an external server and not part of the standard bundle of Discourse containers. The vector extension must be installed with different permissions compared to the database user for Discourse. Therefore the installation had to be performed manually, not as one step of the bootstrap process.