Discourse 2.6.0.beta2 密码重置出现问题

大家好!

我使用的是 Discourse 2.6.0.beta2 的 Docker 安装,并通过 Nginx 反向代理。不幸的是,用户无法重置密码。虽然会收到一封包含链接的邮件,但无论多快尝试使用该链接,链接似乎都是损坏的。点击邮件中的重置密码链接时,会出现一个悲伤的表情 :frowning: 以及“出错了”的提示信息。

在管理面板(https://mysite/logs/)中,我无法看到与该事件相关的任何日志。更奇怪的是,Docker 容器也没有记录任何内容:

这是

docker logs app

的输出

run-parts: 正在执行 /etc/runit/1.d/00-ensure-links
run-parts: 正在执行 /etc/runit/1.d/00-fix-var-logs
run-parts: 正在执行 /etc/runit/1.d/anacron
run-parts: 正在执行 /etc/runit/1.d/cleanup-pids
正在清理过期的 PID 文件
run-parts: 正在执行 /etc/runit/1.d/copy-env
runsvdir 已启动,PID 为 39
chgrp: 无效的用户组:‘syslog’
ok: run: redis: (pid 52) 0s
ok: run: postgres: (pid 50) 0s
rsyslogd: imklog: 无法打开内核日志 (/proc/kmsg):操作不允许。
rsyslogd: imklog 模块激活失败 [v8.1901.0 请查看 https://www.rsyslog.com/e/2145 ]
supervisor pid: 55 unicorn pid: 78
(55) 正在重新打开日志

我的 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 与另一个 Web 服务器(如 Apache 或 nginx)共享端口,
## 请参阅 https://meta.discourse.org/t/17247 了解详情
expose:
#  - 3040
  - "127.0.0.1:3040:80"

params:
  db_default_text_search_config: "pg_catalog.english"
  upload_size: 20m

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

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

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

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

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

  ## TODO: 此 Discourse 实例将响应的域名
  ## 必需。Discourse 无法仅使用 IP 地址运行。
  VIRTUAL_HOST: $$$$$$$$$$$$$$$$$$$$$$
  VIRTUAL_PORT: 80
  LETSENCRYPT_HOST: $$$$$$$$$$$$$$$$$$$$$44
  LETSENCRYPT_EMAIL: $$$$$$$$$$$$$$$$$$$4
  DISCOURSE_HOSTNAME: $$$$$$$$$$$$$$$$$

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

  ## TODO: 初始注册时将设为管理员和开发人员的逗号分隔邮箱列表
  ## 示例 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: '$$$$$$$$$$$'

  ## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
  # SMTP 地址、用户名和密码是必需的
  # 警告:SMTP 密码中的字符 '#' 可能导致问题!
  DISCOURSE_SMTP_ADDRESS: $$$$$$$$$$$$$$$
  DISCOURSE_SMTP_PORT: $$$$$$$$$$$$
  DISCOURSE_SMTP_USER_NAME: $$$$$$$$$$$$$$$$$$$
  DISCOURSE_SMTP_PASSWORD: "$$$$$$$$$$$$$$$$"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

  ## 如果您添加了 Lets Encrypt 模板,请取消注释以下行以获取免费 SSL 证书
 # LETSENCRYPT_ACCOUNT_EMAIL: $$$$$$$$$$$$$$$

  ## 此 Discourse 实例的 http 或 https CDN 地址(配置为拉取)
  ## 详见 https://meta.discourse.org/t/14857
  #DISCOURSE_CDN_URL: https://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-chat-integration.git

## 构建后运行的任何自定义命令
run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 172.18.0.0/24;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {

docker_args:
  - "--network=nginx-proxy"
1 个赞

您收到的是正确的链接吗?它应该看起来像这样:https://forum.example.com/u/password-reset/6a34c2454cf11a6707a23591e6c417ba

2 个赞

你好,Gerhard,感谢你的回复。

链接看起来没问题。我的链接中是“users”而不是“u”。

https://forum.example.com/users/password-reset/23e410a2c11e576c38b1df68f112f88d

3 个赞

你好,
我在两个实例上进行了测试,出现了相同的错误。
看起来生成的链接有误。
如果将:
users → u
进行更改,就能正常工作了 :slight_smile:

2 个赞

我可以确认,@napcok 提出的变通方案确实有效。不过,我并不认为这是一个解决方案。您能否建议我如何解决这个问题?

看起来这仅影响波兰语和土耳其语。

2 个赞

我已提交包含此修复的拉取请求。

我认为应该在那里完成:

以及在那里:

由于我不懂土耳其语、波兰语或 Crowdin,我将避免尝试任何操作 :sweat_smile:

1 个赞

已在 Crowdin 中进行了编辑。
已关闭我在 GitHub 上的拉取请求。

2 个赞

谢谢!我已在 discourse 仓库中更新了翻译。它们应该很快就能合并到 tests-passed 分支。

3 个赞

谢谢!已更新两个论坛,一切正常 :slight_smile:

2 个赞