PG::UndefinedTable: ERROR: отношение "voice_rooms" не существует

У меня была та же проблема — и для запуска этого скрипта потребовалась небольшая помощь с ask.discourse.com, так как для администраторов без глубоких знаний это не так уж просто!

Вот краткая сводка для остальных:


Если вы столкнулись с этим при стандартной установке через Docker, вот как на самом деле запустить указанный выше скрипт.

Откройте оболочку и запустите psql.

  • Один контейнер:

    cd /var/discourse
    ./launcher start app   ## Нужно только если у вас уже была неудачная пересборка
    ./launcher enter app
    su -c 'psql discourse' postgres
    
    
  • Двухконтейнерная конфигурация:

    cd /var/discourse
    ./launcher enter data
    su -c 'psql discourse' postgres
    
    

Вы должны увидеть приглашение discourse=#. Если сомневаетесь, выполните \conninfo.

Выполните скрипт.

Вставьте в приглашение весь блок DO $$ ... $$; из поста nat выше и нажмите Enter. При успешном выполнении вы увидите уведомления вроде:

NOTICE:  Renamed resenha_rooms to voice_rooms
NOTICE:  Renamed resenha_room_memberships to voice_room_memberships
...

Если же возникнет исключение (например, «Both Resenha and Voice tables exist. Nothing was changed.»), остановитесь и вставьте сообщение сюда — скрипт намеренно безопасен и в этом случае ничего не меняет.

Выйдите и пересоберите.

\q
exit

затем на хосте:

./launcher rebuild app          # один контейнер
./launcher rebuild web_only     # два контейнера (можно также через bootstrap)

Возможно, потребуется две пересборки — первая завершит частично примененное состояние миграции, вторая завершится успешно.