从 3.0.0.beta16 更新到 3.1.0.beta2

我尝试进行备份,但备份失败了。

我尝试进行升级。

起初,升级屏幕上的所有选项都处于禁用状态。我重启后,就可以选择 docker_manager 升级了。但它失败了,错误信息如下:

rake aborted!
NoMethodError: undefined method `path' for nil:NilClass

所以,我通过 SSH 连接到服务器,尝试重建,这是我得到的结果:

root@Discourse-1:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
............
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2023-03-10T03:08:58.958320 #1]  INFO -- : Terminating async processes
I, [2023-03-10T03:08:58.958649 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-03-10T03:08:58.958745 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Received SIGTERM scheduling shutdown...
2023-03-10 03:08:58.959 UTC [42] LOG:  received fast shutdown request
2023-03-10 03:08:58.966 UTC [42] LOG:  aborting any active transactions
2023-03-10 03:08:58.969 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-03-10 03:08:58.971 UTC [46] LOG:  shutting down
103:M 10 Mar 2023 03:08:59.047 # User requested shutdown...
103:M 10 Mar 2023 03:08:59.047 * Saving the final RDB snapshot before exiting.
2023-03-10 03:08:59.060 UTC [42] LOG:  database system is shut down
103:M 10 Mar 2023 03:08:59.073 * DB saved on disk
103:M 10 Mar 2023 03:08:59.073 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1004 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"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@Discourse-1:/var/discourse# 

您的 app.yml 中有插件吗?
当这种情况发生在我身上时,通常是某个插件损坏了,在重建之前必须将其注释掉。

1 个赞

你有多少内存?尝试重启机器并重新构建。

1 个赞

free 告诉您什么?

就个人而言,如果备份失败,我不会尝试更新。备份——包括下载副本——对我来说是先决条件。这可能不是一个此时有用的评论,但我认为它必须说出来。

3 个赞

在您之前的帖子中,您提供了有关 rake 中止的更多信息:

2 个赞

那不是问题。那看起来像是没有下载 MaxMind DB 的密钥。问题在上面。

1 个赞

如果问题是无法生成,那么我们不仅要关心 RAM 和交换空间的使用情况,还要关心内核配置。如果日志中出现以下内容

# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

那么按照建议去做是值得的。另请参阅

我的 Discourse 安装非常通用。重启后,我得到了一个干净的备份。所以,最终我决定从头开始安装。安装失败,出现了我上面发布的相同错误。过去四年我一直在 LXD 容器中使用 6GB 内存运行 Discourse,没有出现任何问题。内存利用率稳定在 1.9GB。升级期间,内存峰值达到 5.1GB。我的数据库备份只有 30GB 数据,因此与其他人相比,我的安装规模很小。我的配置运行在 Ubuntu 22.04 上。我应该换用其他发行版吗?

1 个赞

我有大约 40 个用户和 150 篇帖子。该系统使用了 1.8GB 内存,我分配了 6GB 内存。重建工作需要多少内存?过去这似乎一直足够。

我没有使用任何插件。

您能分享一下您的 app.yml 文件吗?恐怕您为 MaxMind 设置了无效的 API 密钥。

1 个赞

这是我的 app.yml。

## 这是全合一、独立的 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"
## 如果您希望添加 Lets 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: "4096MB"

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

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

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

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

  ## TODO:此 Discourse 实例将响应的域名
  ## 必需。Discourse 不能使用裸 IP 地址。
  DISCOURSE_HOSTNAME: discussion.scottibyte.com

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

  ## TODO:将成为初始注册管理员和开发人员的逗号分隔的电子邮件列表
  ## 示例 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'

  ## TODO:用于验证新帐户和发送通知的 SMTP 邮件服务器
  # 需要 SMTP 地址、用户名和密码
  # 警告:SMTP 密码中的字符 '#' 可能会导致问题!
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: redacted
  DISCOURSE_SMTP_PASSWORD: redacted
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认 true)
  DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com

  ## 如果您添加了 Lets Encrypt 模板,请取消注释下方以获取免费 SSL 证书
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## 此 Discourse 实例的 HTTP 或 HTTPS CDN 地址(配置为拉取)
  ## 请参阅 https://meta.discourse.org/t/14857 获取详细信息
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## 用于 IP 地址查找的 MaxMind 地理位置 IP 地址密钥
  ## 请参阅 https://meta.discourse.org/t/-/137387/23 获取详细信息
  DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa

## 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

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

当我进行新的构建时,我尝试了一个新的 Maxmind 密钥,但遇到了同样的错误。

删除或注释掉带有 DISCOURSE_MAXMIND_LICENSE_KEY 的行并重新构建。

1 个赞

哦,如果这有帮助的话。现在一切运行正常。更新是导致问题的根源。

已在 YAML 中注释掉 Maxmind 密钥。正在进行重建。顺便说一句,电子邮件通知一直运行正常。最近,备份下载链接的电子邮件不再起作用。我只需转到文件夹并通过 sftp 下载备份,这可以正常工作,并且备份日志成功完成。那么,您认为 Maxmind 密钥的问题出在哪里?

@Falco 看来问题出在 Maxmind 密钥上。


正如你所见,重建成功了,论坛也已更新到最新版本。从 GUI 进行新的备份、备份通知以及备份下载链接都运行正常。一切都很好。
谢谢你,你真是大师!评论很棒,帮助也很棒。

所以,即使更换了新的 Maxmind 密钥,我也没有成功。关于这一点,有什么建议吗?

3 个赞

那么无效的密钥会中断构建,但 Null 密钥不会?

2 个赞

理想情况下两者都不会,只需要确认具体是哪里坏了,并提供正确的复现步骤,以便我们提交一个 bug 并指派一名工程师来修复。

2 个赞

我所做的只是注释掉密钥,然后重新构建就完美地完成了。使用有效的(甚至是新的密钥),构建就会失败,并附带我提供的日志。

1 个赞