如何检查是什么阻止了rake migrate?

我正在尝试多站点,我已经安装了第二个实例,并且运行得非常好。

但现在我无法重建。日志显示:

warning " > babel-plugin-debug-macros@0.4.0-pre1" has unmet peer dependency "@babel/core@^7.0.0".
warning "workspace-aggregator-ffab61d1-8b70-4cda-8f38-dde575adc062 > discourse > @uppy/xhr-upload@3.1.0" has incorrect peer dependency "@uppy/core@^3.0.6".
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "idx_category_users_user_id_category_id"
DETAIL:  Key (user_id, category_id)=(-4, 9) already exists
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 695 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:\nmigrate'"]}
bootstrap failed with exit code 1

尝试禁用插件后仍然无法修复。我可以启动应用程序,但无法重建。

您是否已安装 Discourse Chatbot :robot: (支持 ChatGPT)

是的,然后尝试卸载(因为我看到我无法在多站点中测试插件,除非手动选择它们)。

该错误来自此处,您需要手动修复数据库记录并删除重复项,即使在卸载插件后也是如此,因为它添加到数据库中的内容是永久性的。

2 个赞

谢谢。您能确认一下这是否是我想要的吗?

discourse=# \d category_users
                                            Table "public.category_users"
       Column       |            Type             | Collation | Nullable |                  Default                   
--------------------+-----------------------------+-----------+----------+--------------------------------------------
 id                 | integer                     |           | not null | nextval('category_users_id_seq'::regclass)
 category_id        | integer                     |           | not null | 
 user_id            | integer                     |           | not null | 
 notification_level | integer                     |           | not null | 
 last_seen_at       | timestamp without time zone |           |          | 
Indexes:
    "category_users_pkey" PRIMARY KEY, btree (id)
    "idx_category_users_category_id_user_id" UNIQUE, btree (category_id, user_id)
    "index_category_users_on_user_id_and_last_seen_at" btree (user_id, last_seen_at)

我尝试过 DROP INDEX idx_category_users_category_id_user_id,但我真的很希望能得到准确的命令 :slight_smile:

嗯,据推测有几十个安装,而且据我所知没有出现过此类问题。

这里具体的问题是什么?

fixture 脚本会为 bot 用户播种(这样管理员就不需要访问 rails 控制台),如果尝试两次可能会失败,但有一个检查。我将检查该检查是否万无一失。这个安装版本是否运行了两次?

您不应该删除索引!

您只需要删除重复的记录。

查找 user_id 为 -4 且 category_id 为 9 的第二条记录,并使用其 id 删除它。

这是一个有风险的操作,所以请先使用:

SELECT FROM category_users WHERE id = <第二个 id>;

来确保它只返回一条记录,然后:

DELETE FROM category_users WHERE id = <第二个 id>;

您能回忆起您对机器人做了哪些更改吗?

3 个赞

补充一点,我认为在问题解决后您不需要删除该插件,但我非常好奇为什么会发生这种情况,因为我没有收到其他报告?

谢谢 Robert,我问是因为我显然不是数据库方面的专家,而且我也有备份,但最好还是不要故意做错事 :smiling_face_with_sunglasses:

这个机器人没有被我修改,但我正在使用每个组的默认类别,这似乎破坏了您的实现。

这里有更多关于 Meta 的信息,希望您能找出问题所在并添加一些检查以避免此问题:

2 个赞

好吧,也许不完全是我的错 :sweat_smile:

2 个赞