max-elia
(Max Elia)
168
感谢您提供的指南。
不过,我在从管理后台创建备份时遇到了问题。我收到的错误信息是:
pg_dump: error: connection to database "discourse development" failed: FATAL: Peer authentication failed for user "postgres".
我已检查 pg_hba.conf 文件,并将所有选项都设置为 trust。
如果能得到一些协助以解决此问题,将不胜感激。
我在 Ubuntu 和 macOS 上都进行了尝试。除了备份功能外,其他一切(如创建帖子、API 调用等)在两个系统上均运行正常。
感谢这个出色的 Docker 解决方案。
在运行插件规格测试时,以下命令效果很好:
d/rake plugin:spec["discourse-follow"]
是否有一种方法可以像非 Docker 开发环境那样,针对特定的插件测试?例如:
LOAD_PLUGINS=1 RAILS_ENV=test rspec plugins/discourse-follow/spec/requests/follow_controller_spec.rb:32
我尝试过类似以下的方式:
d/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:10 LOAD_PLUGINS=1 RAILS_ENV=test
但遇到了错误。
LOAD_PLUGINS 和 RAILS_ENV 必须放在命令之前以设置环境变量。如果放在命令之后,它们会被当作 rspec 的参数,而 rspec 无法识别这些参数。
LOAD_PLUGINS=1 RAILS_ENV=test d/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:10
不,我还没被说服这行得通——你实际试过吗?
我得到:
NameError:
uninitialized constant Follow
我怀疑这是因为环境变量没有传递到 Docker 进程中?
这正是我将其作为参数传递的原因。
抱歉,我误读了您的两条指令,以为“第一条命令对该规范有效,第二条无效”。我目前没有搭建开发环境来进行测试。
查看 GitHub 上的 rspec 文件后,我认为您说得对,环境变量确实没有被传入。不过,您应该可以通过运行 d/shell 进入容器内的 shell,然后在那里执行您的 rspec 命令。
1 个赞
Simon,这不仅仅是一个出色的可行变通方案,非常感谢!
刚试了一下,确实有效,例如:
my-blah-machine:~/discourse$ d/shell
discourse@discourse:/src$ LOAD_PLUGINS=1 RAILS_ENV=test rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
已将此方法和整个插件版本添加到 Wiki 中。
1 个赞
仔细看看 d/exec,d/shell 和 d/rspec 都在使用它,我认为它也可以这样简化:
RAILS_ENV=test d/exec LOAD_PLUGINS=1 rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
d/exec 会传入 RAILS_ENV,但不会传入 LOAD_PLUGINS,因此它们需要放在 d/exec 的两侧。
1 个赞
这给了我一个错误:
OCI 运行时 exec 失败:exec 失败:container_linux.go:380:启动容器进程导致:exec: "LOAD_PLUGINS=1":在 $PATH 中未找到可执行文件:未知
啊,看来不能那样使用 docker exec 来传递环境变量。不过没关系,至少先打开 shell 是可行的。
1 个赞
dmc
177
我和 Max 遇到了完全相同的问题。每当我尝试在本地开发的 Docker 安装环境中进行备份或恢复时,都会收到相同的错误:Peer authentication failed for user "postgres"(用户 “postgres” 的同行身份验证失败)。
经过一番排查,我发现开发环境中的数据库配置显示如下:
BackupRestore.database_configuration
=> #<struct BackupRestore::DatabaseConfiguration host=nil, port=nil, username="postgres", password=nil, database="discourse_development">
不知何故,开发环境没有在环境变量中设置用户名,导致 BackupRestore 模块将用户名默认设置为 postgres。
# lib/backup_restore.rb:122
DatabaseConfiguration.new(
config["backup_host"] || config["host"],
config["backup_port"] || config["port"],
config["username"] || username || ENV["USER"] || "postgres",
config["password"] || password,
config["database"]
)
我们可以在哪里设置正确的数据库用户名?
1 个赞
我们该如何在此处使用 https://meta.discourse.org/t/discourse-theme-cli-console-app-to-help-you-build-themes/82950?
我们已经成功安装了 gem:d/exec sudo gem install discourse_theme……现在的挑战是如何将其符号链接到本地主题……
@Simon_Manning 请注意使用 sudo 来解决权限问题(感谢 @fzngagan 的提醒)。
我正在尝试使用 Docker 设置测试一个插件。应用程序会随机停止加载,此时我只看到一个空白页面,直到我删除数据文件夹并重新构建所有内容。有什么调试该问题的建议吗?
dmc
181
我的“权宜之计”是将以下代码块中的用户名从 postgres 替换为 discourse:
# lib/backup_restore.rb:122
DatabaseConfiguration.new(
config["backup_host"] || config["host"],
config["backup_port"] || config["port"],
config["username"] || username || ENV["USER"] || "postgres",
config["password"] || password,
config["database"]
)
helmi
(Helmi)
182
我从本地 Mac 切换到 Ubuntu 虚拟机,本以为这样能更容易运行,但遗憾的是目前行不通。
在早期阶段已经遇到了一些奇怪的权限问题。d/bundle install 报告需要 sudo 权限才能安装某些内容,d/rails s 也返回了权限问题。
Traceback (most recent call last):
8: from /src/bin/unicorn:70:in `<main>'
7: from /src/bin/unicorn:38:in `ensure_cache_clean!'
6: from /usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `mkdir_p'
5: from /usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `each'
4: from /usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `block in mkdir_p'
3: from /usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `reverse_each'
2: from /usr/local/lib/ruby/2.7.0/fileutils.rb:228:in `block (2 levels) in mkdir_p'
1: from /usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `fu_mkdir'
/usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `mkdir': Permission denied @ dir_s_mkdir - /src/tmp (Errno::EACCES)
有什么想法吗?这台机器之前曾无问题地运行过生产环境的 Discourse。我只是停止了并移除了那些容器,然后将开发用的 git 仓库克隆到了另一个目录。目前正通过 tmux 来运行所有操作以处理不同的 shell 实例。
dfabulich
(Dan Fabulich)
183
我还没有使用 M1,但我预计很快就会切换,而且我真的很喜欢 Docker 设置的便利性。
该 PR 链接指向 https://github.com/docker/for-mac/issues/5321,其中他们表示:
唯一的解决方案是切换到支持 arm64 的多架构镜像。 这些镜像也会快得多,并且通常更可靠。我建议调查您正在使用的基础镜像,并在可能的情况下切换到多架构镜像。您可以在 Docker Hub 上查看每个镜像支持哪些架构:[…]
若要自行构建多架构镜像,我推荐使用 docker buildx,请查看这篇博客文章:https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/
Discourse 团队是否愿意支持多架构镜像?看起来 Discourse 的基础镜像基于 debian:buster-slim,而该镜像 确实 支持多架构,因此将 Discourse 基础镜像改为多架构似乎不应过于困难。但这可能会使你们处于必须在生产环境中支持 ARM 的境地。需要有人(也许是 Discourse 团队?)在 x86_64 和 ARM 上运行 Discourse 测试,修复失败时的问题等。
在这里提交 PR 会受到欢迎吗?
(依我之见,即使在云托管环境中,ARM 也是未来的架构。)
2 个赞
我尝试在 WSL2 上设置此环境。
我已经成功启动 ember_cli,但 Chrome 显示了以下错误:
终端或开发日志中均未显示任何错误。欢迎提供任何建议,谢谢?
1 个赞
大家好,
我遇到了同样的问题,所以我想把它作为一个 bug 提出来。请看下面。
在干净的开发 Docker 环境中备份恢复失败:用户“postgres”的对等身份验证失败
如果我能提供更多信息或提供任何帮助,请告诉我。
Koen
dcook
187
无法在 openSUSE Leap 15 上运行。我猜它不受支持,尽管既然我们正在使用 Docker,这应该无关紧要……
Migrating database...
rake aborted!
Errno::EACCES: Permission denied @ dir_s_mkdir - /src/app/assets/javascripts/plugins
/src/lib/plugin/instance.rb:441:in `ensure_directory'
/src/lib/plugin/instance.rb:713:in `activate!'
lib/discourse.rb:283:in `block in activate_plugins!'
lib/discourse.rb:280:in `each'
lib/discourse.rb:280:in `activate_plugins!'
/src/config/application.rb:318:in `block in <class:Application>'
/src/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/src/config/application.rb:317:in `<class:Application>'
/src/config/application.rb:73:in `<module:Discourse>'
/src/config/application.rb:72:in `<main>'
/src/Rakefile:7:in `<main>'
(See full trace by running task with --trace)
我尝试手动创建“app/assets/javascripts/plugins”,但这导致了:
Migrating database...
rake aborted!
Errno::EACCES: Permission denied @ dir_s_mkdir - /src/tmp
lib/discourse.rb:94:in `atomic_write_file'
/src/lib/plugin/instance.rb:726:in `activate!'
lib/discourse.rb:283:in `block in activate_plugins!'
lib/discourse.rb:280:in `each'
lib/discourse.rb:280:in `activate_plugins!'
/src/config/application.rb:318:in `block in <class:Application>'
/src/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/src/config/application.rb:317:in `<class:Application>'
/src/config/application.rb:73:in `<module:Discourse>'
/src/config/application.rb:72:in `<main>'
/src/Rakefile:7:in `<main>'
(See full trace by running task with --trace)
所以我将 mkdir tmp 放在源文件夹中……
但这又导致了:
Migrating database...
rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /src/tmp/5ad4443faf817dc922116f8df65ae5c3
lib/discourse.rb:97:in `initialize'
lib/discourse.rb:97:in `open'
lib/discourse.rb:97:in `atomic_write_file'
/src/lib/plugin/instance.rb:726:in `activate!'
lib/discourse.rb:283:in `block in activate_plugins!'
lib/discourse.rb:280:in `each'
lib/discourse.rb:280:in `activate_plugins!'
/src/config/application.rb:318:in `block in <class:Application>'
/src/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/src/config/application.rb:317:in `<class:Application>'
/src/config/application.rb:73:in `<module:Discourse>'
/src/config/application.rb:72:in `<main>'
/src/Rakefile:7:in `<main>'
(See full trace by running task with --trace)
看起来 boot_dev 是以 discourse 用户身份运行 docker exec……但目录归用户 1016(我的主机用户的 uid)所有。
我想很多开发者在他们的个人笔记本电脑上不会遇到这个问题,因为他们的用户 uid 是 1000,这恰好吻合……
1 个赞