Плагин Locations 🌍

Я просто хотел ещё раз поднять этот вопрос как предложение по новой функции.

У нас в сообществе это уже используется при планировании мероприятий. Сейчас люди используют Google Maps, чтобы узнать, насколько далеко находится предложенное место проведения события.

Также это полезно при проверке расстояния до других пользователей. (Мы ведём форум для любителей подводного плавания, и люди ищут там напарников для дайвинга.)

3 лайка

@Roi, вам может быть интересно это:

С этим релизом мы вводим (экспериментальный) поиск по местоположению пользователей на естественном языке с помощью Discourse Chatbot :robot:, так что вы можете задавать ему такие вопросы, как:

  • «Покажите пять ближайших пользователей к моему местоположению» … (если вы указали своё местоположение) … или даже
  • «Покажите всех пользователей в радиусе 500 км от моего местоположения».
  • «Покажите пользователей в радиусе 200 км от Берлина».

Пока что поиск по местоположению тем не поддерживается … но это уже выполнено на две трети и находится в планах …

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

8 лайков

Я знаю, что это всё ещё находится в стадии разработки, так что вы, возможно, уже об этом знаете…

  1. Иногда при открытии карты пользователей я вижу пустую карту, то есть отображается карта стран, но на ней нет пользователей. Если обновить страницу, отображённые пользователи появляются снова. Я не нашёл надёжного способа воспроизвести это, но пустую карту я вижу как минимум в 50% случаев при открытии карты пользователей. Пустая карта, похоже, появляется только на карте пользователей. На карте тем я её пока не замечал.

  2. Слева от полей с радиокнопками «Имя»/«Имя пользователя» и т. д. есть пустой белый квадрат, например:

image

1 лайк
  1. Да, решение не идеальное. Сейчас это не мой приоритет. PR принят.

  2. Это полностью намеренно: это поле поиска.

1 лайк

Ах вот как! Так оно и есть.

Я ещё кое-что обнаружил. На моей карте тем не так много записей, но в США три из них сгруппированы на восточном побережье и две — на западном. Если щёлкнуть по кластеру на восточном побережье, карта приблизится и покажет три отдельные точки тем. Однако, если щёлкнуть на любую из этих точек, вместо открытия соответствующей темы карта приблизится, чтобы показать две точки на западном побережье. Это поведение воспроизводится — попробуйте на моём сайте https://discourse.weather-watch.com/map

2 лайка

Действительно, очень любопытно! Странно, но у меня на данных всё работает нормально. Также я заметил на вашей карте ошибку при наведении на кластер. Версия Leaflet явно устарела… это может быть причиной проблемы…

1 лайк

Окей, я обновил версию Leaflet и популярного плагина для кластеризации маркеров до последней версии. Проверьте, поможет ли это:

Давайте сразу разберёмся с этим по-настоящему на актуальном коде :sweat_smile:

(бесполезно обсуждать подобные проблемы, если мы используем старую библиотеку — кто знает, что они там уже исправили!).

3 лайка

Спасибо за быстрое обновление. При первом тесте оно работает лучше. Я не наблюдал странного скачка с восточного на западное побережье в нескольких проведённых тестах. Завтра я проведу дополнительные тесты.

2 лайка

Да, я вижу. Отлично! Спасибо за оперативную перепроверку.

2 лайка

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

4 лайка

Спасибо, что обратили на это моё внимание, и извините, что я не был здесь несколько дней, чтобы оставить комментарий.

Это действительно звучит многообещающе. :slight_smile: Но на данный момент у нас в форуме не активен AI-чатбот. Я всё ещё пытаюсь понять, сколько нам будет стоить получение ключа API от OpenAI. Поскольку мы работаем с сообществом на некоммерческой основе и не взимаем плату, мы с трудом покрываем расходы на сервер и домен за счёт нескольких пожертвований и подобных вещей. Поэтому это важный вопрос для нас. :wink:

Ссылка на ответ в сообщении с примерами расчётов больше не работает. Можете ли вы подсказать, где её найти? :slight_smile:

Кроме интеграции AI-чатбота: планируете ли вы добавить в плагин также информацию о расстоянии? То есть просто показывать расстояние от текущего вошедшего пользователя до мероприятия или до другого пользователя — если обе стороны указали своё местоположение? Именно так это решалось в простом плагине местоположения для phpBB, который мы использовали ранее.

К сожалению, пост с ценой был удалён, так как тема становилась неестественно длинной. Я уберу это из первого сообщения. (Готово)

Предлагаю сначала попробовать в режиме «только для сотрудников».

Нет, я не планирую делать это доступным в плагине Locations без чат-бота.

Для всех вас, пользователей подпапок с подреволюционной направленностью, @renato любезно отправил PR, чтобы убедиться, что маркеры работают в такой конфигурации:

Большое спасибо, @renato! :pray:

5 лайков

СПАСИБО!
Один быстрый вопрос:
Как обновить этот плагин? Команда run ./reset-all-repos кажется рискованной.
Цель — обновить только этот плагин, не потеряв данные 180 уже внесённых проектов.

1 лайк

Это не совсем вопрос, специфичный для плагинов, но вам нужно будет запустить tests-passed и обновиться до последней версии, чтобы всё новое заработало.

Это всегда рискованно :sweat_smile:, если только вы не хотите использовать стабильную версию? (в этом случае это обновление пока не актуально).

Онлайн-обновление (через /admin/upgrade) может сработать, или, как обычно, пересоберите приложение с помощью ./launcher rebuild app — предполагая, что у вас стандартная установка?

Я не могу гарантировать состояние поддержки остальных ваших плагинов, но удачи! :sweat_smile:

1 лайк

Столкнулся с той же проблемой.

Я попробовал метод, описанный здесь:

Но это не помогло.
Система Ubuntu, перезагрузка не помогает,
./launcher restart app, ./launcher start app не работают.

Сообщение об ошибке при запуске ./launcher rebuild app:

......
111:M 12 Dec 2023 12:11:02.199 * DB saved on disk
111:M 12 Dec 2023 12:11:02.200 # Redis is now ready to exit, bye bye...



FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 3553 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

Спасибо @itsbhanusharma

Говорится, что причина в более ранней ошибке, я привожу их здесь:

I, [2023-12-13T00:50:13.222274 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2023-12-13 00:50:18.347 UTC [3597] discourse@discourse ERROR:  invalid input syntax for type double precision: ""

2023-12-13 00:50:18.347 UTC [3597] discourse@discourse STATEMENT:  INSERT INTO locations_topic (topic_id, latitude, longitude, name, street, district, city, state, postalcode, country, countrycode, international_code, locationtype, boundingbox, updated_at, created_at) (
          SELECT
          tc.topic_id,
          (tc.value::json->'geo_location'->>'lat')::FLOAT,
          (tc.value::json->'geo_location'->>'lon')::FLOAT,
          tc.value::json->'geo_location'->>'name',
          tc.value::json->'geo_location'->>'street',
          tc.value::json->'geo_location'->>'district',
          tc.value::json->'geo_location'->>'city',
          tc.value::json->'geo_location'->>'state',
          tc.value::json->'geo_location'->>'postalcode',
          tc.value::json->'geo_location'->>'country',
          tc.value::json->'geo_location'->>'countrycode',
          tc.value::json->'geo_location'->>'international_code',
          tc.value::json->'geo_location'->>'type',
          ARRAY[
            (tc.value::json->'geo_location'->'boundingbox'->>0)::FLOAT,
            (tc.value::json->'geo_location'->'boundingbox'->>1)::FLOAT,
            (tc.value::json->'geo_location'->'boundingbox'->>2)::FLOAT,
            (tc.value::json->'geo_location'->'boundingbox'->>3)::FLOAT
          ],
          tc.updated_at,
          tc.created_at
        FROM topic_custom_fields tc
        WHERE tc.name = 'location'
        AND tc.value NOT IN ('"{}"', '{}', '')
        AND tc.value::json->'geo_location'->>'lat' IS NOT NULL
        AND tc.value::json->'geo_location'->>'lon' IS NOT NULL
        )
        ON CONFLICT DO NOTHING

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled: (StandardError)

ERROR:  invalid input syntax for type double precision: ""
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.0/lib/patches/db/pg.rb: 110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.0/lib/patches/db/pg.rb: 110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mini_sql-1.5.0/lib/mini_sql/postgres/connection.rb:202:in `run'

#--------------
Caused by:
PG::InvalidTextRepresentation: ERROR:  invalid input syntax for type double precision: "" (PG:: InvalidTextRepresentation)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.0/lib/patches/db/pg.rb: 110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.0/lib/patches/db/pg.rb:  110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mini_sql-1.5.0/lib/mini_sql/postgres/connection.rb:202:in `run'

и сообщение docker ps:

/var/discourse# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED             STATUS         PORTS                                                                      NAMES
d3c8e85149a8   local_discourse/app   "/sbin/boot"   About an hour ago   Up 6 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Ваша ошибка не совпадает с ошибкой автора темы (OP). Не могли бы вы предоставить полный лог пересборки?

Спасибо, Бхану. Я повторно выполнил процесс сборки и воспроизвёл «предыдущие ошибки», упомянутые в предыдущем сообщении. Не могли бы вы помочь разобраться в проблеме и найти решение?

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

1 лайк

Отлично! Я только что пересобрал систему, и она работает.

Хотя должен сказать, что плагин геолокации очень хорош. Поэтому надеюсь, что относительная отладка может быть выполнена.