Ambiente de desenvolvimento: porta ausente resulta em imagens quebradas

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)

Eu tive o problema oposto ao do autor da postagem original ao configurar um site de desenvolvimento ontem: estou executando meu servidor de desenvolvimento atrás de um proxy Nginx, então quero URLs limpas, mas não importa o que eu mudasse nas minhas configurações, o Discourse continuava adicionando :3000 a muitos dos meus links internos, incluindo o logotipo do site. Acabei rastreando isso até as linhas 291 a 293 em lib/discourse.rb:

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

Comentar essas linhas fez com que meu logotipo e outros links funcionassem corretamente, embora eu não saiba se isso pode levar a outros problemas no futuro. Parece um pouco contra-intuitivo substituir o SiteSetting.port dessa maneira.

Brinquei um pouco mais com isso e parece que tudo funciona corretamente se eu apenas definir SiteSetting.port = 443 e também marcar a caixa ‘forçar https’ (e imagino que também funcionaria com a porta 80 e sem https). Eu tinha lido em algum lugar que deveria deixar as configurações de porta vazias, mas acho que era um conselho ruim.