Environnement de développement : un port manquant entraîne des images brisées

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)

J’ai rencontré le problème inverse de celui du créateur du sujet hier lors de la configuration d’un site de développement : j’exécute mon serveur de développement derrière un proxy Nginx, je veux donc des URL propres, mais peu importe ce que je modifiais dans mes paramètres, Discourse continuait d’ajouter :3000 à de nombreux liens internes, y compris le logo du site. J’ai finalement identifié la cause aux lignes 291 à 293 dans lib/discourse.rb :

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

En commentant ces lignes, mon logo et les autres liens fonctionnent correctement, bien que je ne sache pas si cela pourrait entraîner d’autres problèmes à l’avenir. Cela semble un peu contre-intuitif de remplacer SiteSetting.port de cette manière.

J’ai un peu joué avec cela, et il semble que tout fonctionne correctement si je définis simplement SiteSetting.port = 443 et que je coche également la case « forcer HTTPS » (et je suppose que cela fonctionnerait également avec le port 80 et sans HTTPS). J’avais lu quelque part que je devrais laisser les paramètres de port vides, mais je suppose que c’était un mauvais conseil.