重建时出现问题

这是我使用 docker 27.0 的插件配置

cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/paviliondev/discourse-locations.git

在 ./launcher rebuild app 上

我收到关于 location 插件的以下错误

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 449 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migra
te'"]}
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.

请提供建议

看看您是否能找出哪个迁移失败了。

2 个赞

在原始帖子中,正如我提到的
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate’ failed with return #<Process::Status: pid 449 exit 1>

在日志的更靠上部分,它会打印出已完成的迁移,因此您需要找到导致问题的那个。

2 个赞

oO0OoO0OoO0Oo Redis 正在启动 oO0OoO0OoO0Oo
Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=447, just started
Configuration loaded

  • monotonic clock: POSIX clock_gettime
    Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
    Failed listening on port 6379 (TCP), aborting.

cd /var/www/discourse & & su discourse -c bundle exec rake db:migrate rake aborted!
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=xx.xx.xx.xx:443 state=error: unexpected eof while reading (OpenSSL::S
SL::SSLError)

你的错误在于 locations 插件那一行

- git clone  https://github.com/paviliondev/discourse-locations

删除我上面那一行中的 “.git”。

https://github.com/paviliondev/discourse-locations

插件的 GitHub 链接没有 “.git”。docker 的第一行有一个 “.git”。插件只是链接地址。

如果你向上滚动日志,你应该会看到与 locations 插件行相关的某种错误。我得到了你发布的那个错误,但它不影响重建。

这不会影响任何事情——两者都给你相同的结果

4 个赞

好的,我之前不知道。我只是在比较我的实例 app.yml 行,并注意到只有 docker 行有“.git”扩展名,并回忆起有关这些文件布局非常敏感的警告。

感谢您的澄清。

1 个赞

如果这是 app.yml 的 1:1 副本,那么 git-lines 的起始位置错误。 - 应该在 d 下面。

cmd:
  - git…
3 个赞

那么我的问题是,URL 中带有 .git 的其他插件是如何正常工作的?例如:日历和新闻插件在 .git 下运行良好,这正是我们通常应用 git 命令的方式。你能解释一下 .git 有什么区别吗?

我看到迁移失败,并且还显示了与端口相关的问題,不确定是什么原因?

如果你看了 @supermathie 对我的回复。我错了。我的判断基于我的 app.yml 设置。显然,两种布局都可以。

我不担心你之前发布的端口错误,因为我也会遇到,但它会重新构建。尝试删除 locations 插件并重新构建,看看它是否仍然失败。

如果失败,请向上滚动,捕捉最终失败消息之前的相当一部分输出。如果这是插件安装问题或其他问题,应该会有错误消息。

可能在你编辑 app.yml 文件时,你可能插入了一个空格或其他东西。一个好习惯是,在更改 app.yml 文件之前,先捕获更改前的内容,这样如果失败了,你就可以逐行比较新旧内容。

我通常会在每次重新构建时观察,并且已经习惯了一些常见的错误/警告消息,这些消息似乎不影响重新构建。

很久以前我遇到过一个与插件相关的失败,但在我当时的情况下,是因为错过了 Chat 已合并到核心的更新。

这里的人们需要看到更多重新构建的日志文件才能帮助识别失败的位置。

运行 discourse-doctor,正如失败结果所建议的那样,也可能有所帮助。但根据我的经验,向上滚动通常是我最好的选择。

你也可以复制 app yml 的底部部分或全部内容并粘贴在这里。只需确保编辑掉敏感信息,如你的邮件提供商行、maxmind 信息。不过你怀疑是插件区域,所以……即使只是从 $home 下面的底部部分复制也可能提供一些见解。

1 个赞

我也可以看到这一行,并且我可以确认我的第二个虚拟机也遇到了同样的问题,仅限于位置插件。
Caused by:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=184.104.226.109:443 state=error: unexpected eof while reading (OpenSSL::SSL::SSLError)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:46:in connect_nonblock' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:46:in ssl_socket_connect’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:1742:in `connect’

1 个赞

如果从 app.yml 中移除位置插件,您能重新构建吗?

您是否已验证了您文件的缩进,正如这里提到的?

1 个赞

除了位置之外,其他一切正常

2 个赞

我相信 Robert 很快就会查看位置插件问题。我注意到最新版本的 Discourse 在修复弃用时出现了一个错误,他说他很快就会查看。

3 个赞

非常感谢您提供此信息,希望我们解决此问题后能收到通知。
非常感谢。

3 个赞

如果您希望优先处理此事并且有预算,请在 Marketplace 中发帖,但这看起来像是某种 gem 版本/兼容性问题。

4 个赞

但是上周我在 Docker 24.0.x 中添加了相同的插件,并且它正在工作,而这里是 Docker 27.0.x,这是唯一的区别

那个新闻插件也坏了。

3 个赞