luxaritas
(Jonathan Romano)
2022 年3 月 24 日 21:25
1
我尝试升级我的 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 个赞
luxaritas
(Jonathan Romano)
2022 年3 月 24 日 21:29
3
是的,我知道(并且已经这样做了)——不过,我想知道在升级方面我下一步该怎么做。
2 个赞
pfaffman
(Jay Pfaffman)
2022 年3 月 24 日 21:33
4
哦。那没多大帮助
我遇到了类似的问题,但我的解决方案可能帮不了你。
你的 app.yml 中没有设置 SKIP_POST_DEPLOYMENT_MIGRATIONS 吧?如果有,你需要将其设置为零来迁移数据库,然后重建,但我认为这不是你的问题。
pfaffman
(Jay Pfaffman)
2022 年3 月 24 日 21:39
6
我想也是。所以可能存在一个实际问题,与从某个特定点迁移到当前点有关。但那本不应该发生。
undasein
(Andres Garrido)
2022 年3 月 31 日 13:55
7
看看这个:
Sorry. I’m on my phone and not quite thinking well enough to explain…
After the start app
su - postgres
psql discourse
And then the
drop table discourse_reactions_reactions ;
And then type exit or control-d a few times to get out of everything
我清空了所有报错的表(一个接一个,最后有7个),直到可以无误地重建应用。
在你的例子中,问题似乎是一个列:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
也许你应该找到它属于哪个表,以便清空它,或者你也可以直接删除该列。
我相信问题在于,在部分迁移时,这些表已经创建了,因此无法再次创建并报错。也许可以为这个过程添加一个条件,这样就不会报错了?(我不是专家) @pfaffman
pfaffman
(Jay Pfaffman)
2022 年3 月 31 日 15:32
8
听起来没错,@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 个赞
pfaffman
(Jay Pfaffman)
2022 年3 月 31 日 23:08
10
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;
感谢您的帮助。
Benjamin_D
(Benjamin Decotte)
2022 年4 月 2 日 05:56
13
你好 Nick,
我正在尝试重现这个问题,你的实例的提交是什么?
你可以在你的 app.yml 中尝试使用
version: cd7ce52138bed391d5efc56366e7a6517a6079e7
这是 10 天前的版本,就在似乎有类似问题的已恢复提交重做之前。
2 个赞
本·早上好,
请问您是否可以给我讲解一下执行此操作的命令?
我可以轻松更新等等,但这是我第一次遇到问题,说实话,我完全超出了我的舒适区,哈哈。
Benjamin_D
(Benjamin Decotte)
2022 年4 月 2 日 10:10
15
请运行 ./launcher start app 并检查 https://your.domain/admin 上安装的版本,以便我能尝试重现您的步骤。是否安装了任何插件?
2 个赞
嗨 Ben,
安装版本:2.9.0.beta2
(5374e587a3 )
已安装插件:
discourse-reactions
docker_manager
styleguide
谢谢,
Nick
Benjamin_D:
./launcher start app
./launcher start app
-bash: ./launcher: No such file or directory
因此,我注意到我有一些 Ubuntu 更新,所以服务器上的一切都是最新的
再次尝试,仍然是
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
pfaffman
(Jay Pfaffman)
2022 年4 月 2 日 20:47
20
这似乎是一个可行的解决方案。你应该能够升级到这个版本,也许然后你就可以更新到当前版本了?对我来说,这样的说法是有道理的。
1 个赞