PG::UndefinedTable: ERROR: 关系 "voice_rooms" 不存在

我也遇到过这个问题——而且运行那个脚本需要一些指导,因为对于不太专业的系统管理员来说,这并不容易!

以下是为其他人准备的总结:


对于在标准 Docker 安装中遇到此问题的用户,以下是实际运行上述脚本的方法。

获取 shell 并打开 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 完成)

你可能需要两次重新构建——第一次完成半应用的迁移状态,第二次则干净地完成。