从失败/部分应用的升级中恢复

我尝试升级我的 Discourse 实例,但由于一些问题,它似乎处于部分应用状态而失败。运行 ./launcher rebuild app 时,我收到以下错误消息,这表明迁移已(部分)应用:

I, [2022-03-24T21:13:16.043071 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

如果有什么方法可以从中恢复(或者我需要接受现实并进行全新安装),任何指导都将不胜感激。谢谢!

1 个赞

您可以运行

./launcher start app

来启动旧容器。这样您就可以恢复了。

2 个赞

是的,我知道(并且已经这样做了)——不过,我想知道在升级方面我下一步该怎么做。

2 个赞

哦。那没多大帮助 :person_shrugging:

我遇到了类似的问题,但我的解决方案可能帮不了你。

你的 app.yml 中没有设置 SKIP_POST_DEPLOYMENT_MIGRATIONS 吧?如果有,你需要将其设置为零来迁移数据库,然后重建,但我认为这不是你的问题。

不,看起来不是。

我想也是。所以可能存在一个实际问题,与从某个特定点迁移到当前点有关。但那本不应该发生。

看看这个:

我清空了所有报错的表(一个接一个,最后有7个),直到可以无误地重建应用。

在你的例子中,问题似乎是一个列:

PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists

也许你应该找到它属于哪个表,以便清空它,或者你也可以直接删除该列。

我相信问题在于,在部分迁移时,这些表已经创建了,因此无法再次创建并报错。也许可以为这个过程添加一个条件,这样就不会报错了?(我不是专家) @pfaffman

听起来没错,@undasein

我想您想从 bookmarks 表中删除 bookmarkable_id 列。因此,在进入容器并像这样进入 postgres 后:

cd /var/discourse
./launcher enter app
su - postgres
psql

然后您将执行

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

但是,如果论坛正在运行,进行仅数据库备份也不是坏主意。如果不是,您可以在上面的 enter app 行之后使用 discourse backup 进行备份。

1 个赞

我也遇到同样的问题!这是正确的解决方案吗?

That was my guess. You can give it a shot and let us know.

我不太懂 discourse。

@sam 有什么前进的建议吗?标准的安装和升级原来是个噩梦。

以上是解决此问题的正确方法吗?

预先感谢。

不幸的是,这不起作用,仍然收到

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

在执行这些命令后还需要采取其他操作吗?

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

感谢您的帮助。

你好 Nick,
我正在尝试重现这个问题,你的实例的提交是什么?
你可以在你的 app.yml 中尝试使用

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

这是 10 天前的版本,就在似乎有类似问题的已恢复提交重做之前。

2 个赞

本·早上好,

请问您是否可以给我讲解一下执行此操作的命令?

我可以轻松更新等等,但这是我第一次遇到问题,说实话,我完全超出了我的舒适区,哈哈。

请运行 ./launcher start app 并检查 https://your.domain/admin 上安装的版本,以便我能尝试重现您的步骤。是否安装了任何插件?

2 个赞

嗨 Ben,
安装版本:2.9.0.beta2
5374e587a3

已安装插件:
discourse-reactions
docker_manager
styleguide

谢谢,
Nick

./launcher start app
-bash: ./launcher: No such file or directory
 cd /var/discourse

Before

./launcher start app
2 个赞

因此,我注意到我有一些 Ubuntu 更新,所以服务器上的一切都是最新的

再次尝试,仍然是

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

这似乎是一个可行的解决方案。你应该能够升级到这个版本,也许然后你就可以更新到当前版本了?对我来说,这样的说法是有道理的。

1 个赞