开发环境:缺少端口导致图片损坏

I configured a logo in the site settings, but the logo’s URL is missing the default port, i.e. the logo URL looks like this http://localhost/uploads/… rather than http://localhost:3000/uploads/….

I’m starting the development server like this:

RAILS_ENV=development bundle exec rails server

I found that Discourse.base_url is set to "http://localhost" and in config/database.yml, I find this note for the development.hostnames key:

### Don't include the port number here.
Change the "port" site setting instead, at /admin/site_settings.

However, such a site setting does not exist. What do I do?

It’s a hidden setting. Try changing it in the rails console.

bin/rails c

SiteSetting.port = 3000

This works, thank you.

Shouldn’t this be set to 3000 by default in development mode?

No, I don’t think so. Not everyone is using port 3000 for development.

It’s the default, though, isn’t it? That one has to set the hidden port setting is not at all obvious, hence seeing a logo in the development environment not load is unexpected. In other words, setting a custom logo should just work.

Logos work. It’s not something you usually care about in development.

Alternatively, I believe you can use these entries in sitesettings.yml

developer:
  force_hostname:
    hidden: false
    default: '<my-ip>'
  port:
    hidden: false
    default: '<my-port>'

@pfaffman gave me that tip! (and what a life saver that was)

昨天在搭建开发站点时,我遇到了与原帖作者相反的问题:我的开发服务器运行在 Nginx 反向代理之后,因此我希望 URL 保持整洁,但无论我如何修改设置,Discourse 始终会在许多内部链接(包括站点徽标)中添加 :3000。最终我发现问题出在 lib/discourse.rb 的第 291 至 293 行:

if Rails.env.development? && SiteSetting.port.blank?
    url << ":#{ENV["UNICORN_PORT"] || 3000}"
end

注释掉这几行后,我的徽标和其他链接就能正常工作了,不过我不确定这是否会导致后续出现其他问题。以这种方式覆盖 SiteSetting.port 似乎有些反直觉。

我又稍微测试了一下,发现只要将 SiteSetting.port 设置为 443,并勾选“强制 HTTPS