Install Discourse for development using Docker

目前没有办法在 M1 芯片的 Mac 上使用 Docker 来运行 Discourse,对吗?

运行 d/boot_dev --init 时,我遇到了这个错误:

ActiveRecord::NoDatabaseError: 我们找不到您的数据库:discourse_development。可用的数据库配置可以在 config/database.yml 中找到。(ActiveRecord::NoDatabaseError)

我不确定这是 boot_dev 脚本中的一个错误,还是 discourse_development 数据库应该在别处创建。无论如何,我通过这个更改解决了这个问题:

diff --git a/bin/docker/boot_dev b/bin/docker/boot_dev
index 89fdcf6f65..0e9c5ce7d5 100755
--- a/bin/docker/boot_dev
+++ b/bin/docker/boot_dev
@@ -122,6 +122,7 @@ echo "pnpm install..."
 
 if [ "${initialize}" = "initialize" ]; then
     echo "Migrating database..."
+    "${SCRIPTPATH}/rake" db:create
     "${SCRIPTPATH}/rake" db:migrate
     RAILS_ENV=test "${SCRIPTPATH}/rake" db:migrate

在此之后,设置过程按照 OP 中的说明正常运行。

我对 Discourse 的代码库不够熟悉,不知道这是否是正确的修复方法,但如果能有所帮助,我很乐意提交一个 PR。:slightly_smiling_face:

6 个赞

好的,请创建一个 PR 并在此处链接。谢谢!

4 个赞

完成!

3 个赞

运行起来有什么进展吗?

我也遇到了同样的错误。我运行了docker rm -f /discourse_dev,然后重新运行了d/boot_dev --init,这次它工作了。

注意:
我刚注意到文件夹是 data/postgres 而不是 tmp/postgres,这也是为什么“重置数据库”命令会删除 data 文件夹 :slight_smile:

2 个赞

我再看了一下 docker 的开发安装,但一直收到:

Caused by:
PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory (PG::ConnectionBad)
        Is the server running locally and accepting connections on that socket?

但我可以确认服务已启动(并且在我使用普通的非 docker “手动”安装 discourse 时工作正常)

~/discourse_docker/discourse$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2025-03-10 17:26:13 GMT; 6min ago
    Process: 2052109 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 2052109 (code=exited, status=0/SUCCESS)

Mar 10 17:26:13 black-knight systemd[1]: Starting PostgreSQL RDBMS...
Mar 10 17:26:13 black-knight systemd[1]: Finished PostgreSQL RDBMS.

Docker Dev 是否有特定的、不同的 Postgres 连接需求?

2 个赞

我发现默认的 :debug 日志级别太过冗长——SQL 查询把重要的错误淹没了。config/environments/development.rb 允许设置 DISCOURSE_DEV_LOG_LEVEL ,但我不知道是否可以通过 d/rails 脚本来设置?

无奈之下,我暂时在 config/environments/development.rb 中硬编码为 config.log_level = :info,这样问题就解决啦。也许对其他人也有帮助。

1 个赞

我正在尝试使用 Data Explorer 插件启动它,因为我想深入研究 DE 自动化。

我已成功启动容器。

然后,我通过克隆仓库并将其符号链接到 discourse/plugins 目录来“安装”插件(我应该这样做吗?指南在这方面确实可以更清楚一些)。

我已通过 UI 启用了该插件。但是当我尝试访问它时,我收到一个错误。

日志中所有显示的内容是:

Processing by DiscourseDataExplorer::QueryController#index as JSON
Completed 500 Internal Server Error in 62ms (ActiveRecord: 9.8ms (5 queries, 0 cached) | GC: 2.9ms)

我该如何处理这个?详细信息在哪里?

1 个赞

你运行过迁移了吗?

我用符号链接我的插件文件夹时运气不太好:

结果我最终移到了一个普通文件夹(请参阅该主题中的我的最后一条评论)。

我认为目前 Docker 卷、文件监视器和符号链接之间存在一些不兼容性。

2 个赞

感谢您的回复@Arkshine!我应该怎么做才能意识到需要这样做?我确实查看了安装插件的教程,但我猜教程中使用的插件示例不需要迁移?

与此同时,我不知道这是否能帮我解决问题,因为我遇到了需要在 Docker 容器中获取我公司代理证书的问题,而且我对 Docker 之前没有太多经验 :frowning:

您在解决什么问题?开发安装通常旨在仅供安装运行所在的本地主机(即您的计算机)访问。

或者您是在尝试调试需要证书(例如身份验证系统)的某个问题?

昨天我尝试重新启动我的镜像时,它要求下载 gem?

正在安装 gem...
正在从 https://rubygems.org/ 获取源索引

由于错误重试获取器 (2/4):Bundler::Fetcher::CertificateFailureError 无法验证 https://rubygems.org/ 的 SSL 证书。
您有可能正在遭受中间人攻击,但最有可能的是您的系统没有验证所需的 CA 证书。有关 OpenSSL 证书的信息,请参阅 https://railsapps.github.io/openssl-certificate-verify-failed.html。

由于错误重试获取器 (3/4):Bundler::Fetcher::CertificateFailureError 无法验证 https://rubygems.org/ 的 SSL 证书。
您有可能正在遭受中间人攻击,但最有可能的是您的系统没有验证所需的 CA 证书。有关 OpenSSL 证书的信息,请参阅 https://railsapps.github.io/openssl-certificate-verify-failed.html。

由于错误重试获取器 (4/4):Bundler::Fetcher::CertificateFailureError 无法验证 https://rubygems.org/ 的 SSL 证书。
您有可能正在遭受中间人攻击,但最有可能的是您的系统没有验证所需的 CA 证书。有关 OpenSSL 证书的信息,请参阅 https://railsapps.github.io/openssl-certificate-verify-failed.html。

无法验证 https://rubygems.org/ 的 SSL 证书。
您有可能正在遭受中间人攻击,但最有可能的是您的系统没有验证所需的
CA 证书。有关 OpenSSL 证书的信息,请参阅
https://railsapps.github.io/openssl-certificate-verify-failed.html。

嘿……如果忘记了管理员帐户的密码会怎么样?只能重装整个开发环境吗?

无法发送电子邮件,因此无法重置密码……

您可以使用控制台设置新密码或创建新的管理员帐户。

1 个赞

有一个成为任何用户的路由。

  http://localhost:4200/session/any-username/become 
4 个赞