数据库文件与服务器不兼容(在 Linode 内部更新)

我在 Error Updating from 3.4.0.beta3-dev to 3.4.0.beta3 中描述了症状
只是错误有所不同。

我无法引用你的图片。

但看起来你需要删除旧的 postgres_data_old 目录。如果你有空间并且很担心的话,可以将其重命名。

我弄不明白如何复制网络列表的屏幕输出。

1 个赞

这是我消息的要点。

也许先检查一下它是不是旧的

 ls -l /var/discourse/shared/standalone/

并确保该备份目录的日期不是今天。

如果你有足够的磁盘空间,你可以这样做

cd /var/discourse
cd shared/standalone
mv postgres_data_old postgres_data_delete_me

然后重试

1 个赞

没有成功。
我认为我正在重复 Upgrade failed spectacularily

请分享您的 app.yml 文件内容?发布前请删除任何敏感信息。

from root@localhost: /var/discourse/containers

## 这是独立的、一体化的 Discourse Docker 容器模板
##
## 修改此文件后,您必须重建
## /var/discourse/launcher rebuild app
##
## 编辑时请*极其小心*!
## YAML 文件对空格或对齐的错误非常非常敏感!
## 如有需要,请访问 http://www.yamllint.com/ 来验证此文件

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## 如果您想添加 Let's Encrypt (https),请取消注释这两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## 此容器应公开哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
## 请参阅 https://meta.discourse.org/t/17247 获取详细信息
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## 将 db_shared_buffers 设置为总内存的最多 25%。
  ## 将由 bootstrap 根据检测到的 RAM 自动设置,或者您可以覆盖它
  db_shared_buffers: "256MB"

  ## 可以提高排序性能,但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个 Git 版本? (默认值:tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## 支持多少并发 Web 请求?取决于内存和 CPU 核心。
  ## 将由 bootstrap 根据检测到的 CPU 自动设置,或者您可以覆盖它
  UNICORN_WORKERS: 4

  ## TODO: 此 Discourse 实例将响应的域名
  DISCOURSE_HOSTNAME: <mydomain>

  ## 如果您希望容器以与上面指定的相同的主机名 (-h 选项) 启动,请取消注释
  ## (默认值为“$hostname-$config”)
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 将被设为管理员和开发者的逗号分隔的电子邮件列表
  ## 首次注册时,例如“user1@example.com,user2@example.com”
  DISCOURSE_DEVELOPER_EMAILS: <myemail>

  ## TODO: 用于验证新帐户和发送通知的 SMTP 邮件服务器
  DISCOURSE_SMTP_ADDRESS: <mymailorg>
  DISCOURSE_SMTP_PORT: <myport>
  DISCOURSE_SMTP_USER_NAME: <mysmpremail>
  DISCOURSE_SMTP_PASSWORD: <mypassword>
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

  ## 如果您添加了 Let's Encrypt 模板,请取消注释下方以获取免费 SSL 证书
  LETSENCRYPT_ACCOUNT_EMAIL: <myemail>

  ## 此 Discourse 实例的 CDN 地址 (配置为拉取)
  ## 请参阅 https://meta.discourse.org/t/14857 获取详细信息
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## 插件在此处
## 请参阅 https://meta.discourse.org/t/19157 获取详细信息
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-math.git

## 构建后要运行的任何自定义命令
run:
  - exec: echo "Beginning of custom commands"
  ## 如果您想设置首次注册的“发件人”电子邮件地址,请取消注释并更改:
  ## 收到首次注册电子邮件后,请重新注释该行。它只需要运行一次。
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"


您能否确认一下您的 Docker 版本?如果您使用的版本低于我们推荐的 24.0.7 版本,我建议您更新 Docker 然后重试。

在另一个主题中曾报告过类似的问题,更新 Docker 似乎解决了那里的问题。

Docker 版本 20.10.7,构建 f0df350

cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.7 LTS (Xenial Xerus)"

您似乎遇到了与其他主题中报告的类似 Docker 问题。

我建议您更新 Ubuntu 和 Docker 到更新的版本,然后重试重建。

如果您的旧 app 容器仍然存在,并且您尚未修改 shared/standalone/postgres_data 中的现有数据文件,您可以尝试运行 ./launcher start app 来暂时在旧容器上启动站点。

2 个赞

我完成了更新Ubuntu的步骤,最后按下了“OK”按钮。


但是屏幕卡在了

重新连接后,我看到我安装的是Ubuntu 18.0.4.6 LTS (Bionic Beaver)。

创建一个具有最新操作系统的新虚拟机将更加容易。18.04 已过支持期,20.04 将于 4 月结束支持。

如果您有最新的备份,请创建一个新服务器并恢复该备份,从而完全避免 PostgreSQL 升级问题。

Discourse 不需要将 PostgreSQL 安装在操作系统上。这也是使用全新操作系统的一个原因。

1 个赞

谢谢 Jay
我已经成功地将一个备份 Linode 恢复到了另一个 Linode(linode2)
现在我需要在 linode2 上启动 Discourse,以便让 Discourse 向我发送备份邮件。
我为 linode2 设置了新的 DNS,但访问时出现 502 Bad Gateway 错误。
也许我需要等待一段时间?
奇怪的是 discbak.softwarebydesign.com.au(linode2)目前正在重定向到 discourse.softwarebydesign.com.au(在原来的 Linode 上)。

您可以使用 scp/rsync 复制备份。它更简单、更快(除非您不知道这意味着什么)。

您确实需要创建一个具有新操作系统的新虚拟机(而不是过时的服务器备份),并按照 使用 rsync 将 Discourse 站点迁移到另一台 VPS 中的描述进行迁移。我刚刚复制的那个也存在一些所有权问题。您可能也会遇到同样的问题。

如果 discbak 运行的镜像与另一台服务器相同,我预计它会给您一个证书错误(除非您访问了 http://),然后重定向到 HOSTNAME 中的任何内容。

可以说我确实不知道我在做什么。
我创建了一个运行 Ubunto 24.0.1 LTS 的新 VPS,并且已经进行到以下指令:

rsync -rvz example.com:/var/discourse /var

由于我的升级失败,example.com 返回 502 错误网关。
我正在学习如何仍然授予访问权限。