Плагин Locations 🌍

  • ИСПРАВЛЕНИЕ: открытие глобальной карты тем больше не должно вызывать проблем
  • ИСПРАВЛЕНИЕ: переход между картой категории и глобальной картой теперь работает корректно
  • Неработающие тесты карты WIP

@vincefrommtl, @Stephane_Roy, @packman, не могли бы вы попробовать это обновление? Обратите внимание на область действия исправлений. Скоро последует ещё одно исправление.

(Техническое примечание: поскольку библиотека Leaflet является глобальным объектом, QUnit, по-видимому, не может её увидеть, поэтому я не смог предоставить полностью интегрированные тесты FE для этих исправлений. Если кто-то знает, как заставить Leaflet и QUnit работать вместе, пожалуйста, дайте мне знать)

3 лайка

Мой отзыв:

  • Переход с глобальной карты на карту категории работает. Но обратный переход (с карты категории на глобальную) сломан, как и переход между категориями.
  • Я не видел этой ошибки в логе после обновления: ActionView::Template::Error (No route matches {:action=>"map_feed", :controller=>"list"}). :slight_smile:
  • Новая ошибка: Иногда кластеризованные ссылки на карте показывают только маркер позиции при увеличении масштаба, без подписи.
  • Новая ошибка: Иногда подписи маркеров на карте не ведут на соответствующую тему.
  • Новая ошибка: Глобальная карта теперь подвержена той же ошибке, что и карты категорий: отображает лишь несколько маркеров (см. ниже).

Что касается карт, на которых отображается меньше маркеров, чем должно: я внимательно изучил это. Оказывается, отображаются только маркеры тем, активных за последние 20 дней (или около того), и максимум 30 из них. Возможно, это проблема конфигурации на нашем форуме? Это кажется очень специфичным! Но мы ничего не меняли в этих настройках. У меня установлено максимальное значение location map max topics равное 1700, и я не думаю, что есть какая-либо настройка, связанная со временем, которая привела бы к отображению только маркеров тем, активных за последние 20 дней?

1 лайк

После обновления я открыл глобальную карту, и маркеры (темы) не отображались. Если отредактировать местоположение темы с маркером и просто сохранить без изменений, маркер появляется. Все мои маркеры старше 20 дней, возможно, это та же проблема, с которой сталкивается @vincefrommtl?

Редактирование: Кнопка «Показать карту» для каждой темы по-прежнему отображает правильное местоположение маркера, даже если этот маркер не виден на глобальной карте.

1 лайк

Спасибо, ребята, я ещё раз посмотрю.

2 лайка

Это не полное исправление, но, полагаю, оно должно восстановить старые расположения тем, избегая при этом ошибки карты при прямой загрузке по внешней ссылке или обновлении страницы в браузере:

Известная проблема: я не решил проблему прямого перехода с карты на карту категорий (хотя это должно быть крайним случаем), но всё остальное должно работать лучше.

1 лайк

Я протестирую это завтра, но один пользователь только что указал, что теперь местоположения в США отображаются в формате: Город, Страна, Штат, например, Атланта, США, Джорджия

Быстрый тест: могу подтвердить, что с этим новым обновлением я вижу все маркеры на карте. Большое спасибо. :slight_smile:

На данный момент я посоветую своим пользователям не переключаться между картами категорий, чтобы обойти сломанный переход.

1 лайк

Единственные недавние изменения касаются наполнения карты.

Порядок страна/штат не соответствует самой последней версии. Я упомянул об этом, потому что не помню, чтобы видел это в версиях за последние пару дней.

1 лайк

@packman на данный момент я исправил вашу предыдущую проблему:

и теперь это покрыто тестами.

ещё раз спасибо @david за то, что вывели меня из бункера в этом вопросе.

3 лайка

@merefield Привет, просто предупреждение: метод modify_user_params устарел уже довольно давно и будет удалён в ближайшее время, теперь, когда Discourse находится на версии 3.2.0.beta1-dev.

discourse-locations/lib/users_map.rb
35:  def modify_user_params(attrs)

Не мог бы ты при случае обновить его, чтобы использовать модификатор users_controller_update_user_params? Спасибо!

1 лайк

Конечно, спасибо за дополнительное предупреждение, я займусь этим на этой неделе.

1 лайк

Блейк, всё готово, не возражаешь, если я добавлю тебя как ревьюера?

3 лайка

Отлично, спасибо!

2 лайка

Спасибо, объединено!

1 лайк

Приношу извинения за плохие новости, но у меня есть отчет об ошибке.

Мы сейчас работаем на последней версии, обновленной сегодня утром: 3.2.0.beta1-dev (7ca5ee6cd2)

Столкнулись со странной проблемой, которой не было две недели назад при последнем обновлении: теперь мы не можем редактировать профиль пользователя, если у него есть пользовательские поля.

Я хочу отредактировать этого пользователя: https://example.com/u/username/preferences/profile

Страница загружается нормально:

Как только я нажимаю «Сохранить», появляется ошибка:

Проблема проявилась, потому что один из наших других веб-сайтов обновляет пользовательское поле «membership», когда члены нашего клуба совершают апгрейд, и при этом конечная точка API Discourse возвращала ошибку 500.

Это также видно при попытке воспроизвести проблему через Postman:

В логах Discourse показано следующее:

и:

plugins/discourse-locations/plugin.rb:188:in `block (2 levels) in activate!'

lib/discourse_plugin_registry.rb:293:in `apply_modifier'

app/controllers/users_controller.rb:2036:in `user_params'

app/controllers/users_controller.rb:198:in `update'

actionpack (7.0.7) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack (7.0.7) lib/abstract_controller/base.rb:215:in `process_action'

actionpack (7.0.7) lib/action_controller/metal/rendering.rb:165:in `process_action'

actionpack (7.0.7) lib/abstract_controller/callbacks.rb:234:in `block in process_action'

activesupport (7.0.7) lib/active_support/callbacks.rb:118:in `block in run_callbacks'

app/controllers/application_controller.rb:420:in `block in with_resolved_locale'

i18n (1.14.1) lib/i18n.rb:322:in `with_locale'

app/controllers/application_controller.rb:420:in `with_resolved_locale'

activesupport (7.0.7) lib/active_support/callbacks.rb:127:in `block in run_callbacks'

activesupport (7.0.7) lib/active_support/callbacks.rb:138:in `run_callbacks'

actionpack (7.0.7) lib/abstract_controller/callbacks.rb:233:in `process_action'

actionpack (7.0.7) lib/action_controller/metal/rescue.rb:23:in `process_action'

actionpack (7.0.7) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'

activesupport (7.0.7) lib/active_support/notifications.rb:206:in `block in instrument'

activesupport (7.0.7) lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport (7.0.7) lib/active_support/notifications.rb:206:in `instrument'

actionpack (7.0.7) lib/action_controller/metal/instrumentation.rb:66:in `process_action'

actionpack (7.0.7) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'

activerecord (7.0.7) lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack (7.0.7) lib/abstract_controller/base.rb:151:in `process'

actionview (7.0.7) lib/action_view/rendering.rb:39:in `process'

actionpack (7.0.7) lib/action_controller/metal.rb:188:in `dispatch'

actionpack (7.0.7) lib/action_controller/metal.rb:251:in `dispatch'

actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'

actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:32:in `serve'

actionpack (7.0.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (7.0.7) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (7.0.7) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:852:in `call'

lib/middleware/omniauth_bypass_middleware.rb:74:in `call'

rack (2.2.8) lib/rack/tempfile_reaper.rb:15:in `call'

rack (2.2.8) lib/rack/conditional_get.rb:40:in `call'

rack (2.2.8) lib/rack/head.rb:12:in `call'

actionpack (7.0.7) lib/action_dispatch/http/permissions_policy.rb:38:in `call'

lib/content_security_policy/middleware.rb:12:in `call'

lib/middleware/anonymous_cache.rb:389:in `call'

lib/middleware/gtm_script_nonce_injector.rb:10:in `call'

rack (2.2.8) lib/rack/session/abstract/id.rb:266:in `context'

rack (2.2.8) lib/rack/session/abstract/id.rb:260:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/cookies.rb:704:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport (7.0.7) lib/active_support/callbacks.rb:99:in `run_callbacks'

actionpack (7.0.7) lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'

logster (2.12.2) lib/logster/middleware/reporter.rb:43:in `call'

railties (7.0.7) lib/rails/rack/logger.rb:40:in `call_app'

railties (7.0.7) lib/rails/rack/logger.rb:27:in `call'

config/initializers/100-quiet_logger.rb:20:in `call'

config/initializers/100-silence_logger.rb:29:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/request_id.rb:26:in `call'

lib/middleware/enforce_hostname.rb:24:in `call'

rack (2.2.8) lib/rack/method_override.rb:24:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/executor.rb:14:in `call'

rack (2.2.8) lib/rack/sendfile.rb:110:in `call'

actionpack (7.0.7) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'

message_bus (4.3.7) lib/message_bus/rack/middleware.rb:60:in `call'

lib/middleware/request_tracker.rb:233:in `call'

railties (7.0.7) lib/rails/engine.rb:530:in `call'

railties (7.0.7) lib/rails/railtie.rb:226:in `public_send'

railties (7.0.7) lib/rails/railtie.rb:226:in `method_missing'

rack (2.2.8) lib/rack/urlmap.rb:74:in `block in call'

rack (2.2.8) lib/rack/urlmap.rb:58:in `each'

rack (2.2.8) lib/rack/urlmap.rb:58:in `call'

unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'

unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'

unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'

unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'

unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'

vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'

vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'

Странно, но я могу редактировать свой собственный профиль и обновлять пользовательские поля без проблем.

Однако я больше не могу редактировать профили других пользователей, и system также не может выполнять обновления через наш API.

Если я отключу плагин Locations, всё снова работает нормально:

3 лайка

@Richie, спасибо за ваш отчет.

Я могу воспроизвести эту проблему.

Кажется, она возникает только тогда, когда у кого-то нет местоположения.

Этот код недавно был рефакторирован из-за устаревания в ядре, и я упустил (довольно значимый) случай.
Я скоро исправлю это.

5 лайков

Ах, значит, возможно, мой успешный редактирование собственного профиля был ложной зацепкой, так как у меня местоположение указано :slight_smile:

Без проблем, спасибо за постоянную поддержку :slight_smile:

Я думаю, что это должно быть исправлено сейчас:

8 лайков

Обновление сегодня утром: ошибок HTTP/500 больше нет.

Спасибо за быстрое исправление, Роберт :smiley: :clap:

3 лайка