Locations Plugin ๐ŸŒ

:information_source: Summary A Discourse plugin that adds structured and geocoded topic and user locations with map-based discovery
:hammer_and_wrench: Repository Link https://github.com/merefield/discourse-locations
:open_book: Install Guide How to install plugins in Discourse
:heart: Sponsorship Please consider becoming an ongoing sponsor of my open source work at a level that suits your or your organisationโ€™s resources and needs to ensure this plugin gets the maintenance it deserves and continues to work for your site in the future.

Enjoying this plugin? Please :star: it on GitHub! :pray:

Features

Discourse Locations provides the complete location-storage, geocoding, and map foundation. The optional Pro extension adds advanced discovery, automation, and users-map presentation while requiring this base plugin.

Feature Base plugin Pro extension
Structured topic locations and configurable input fields :white_check_mark: โ€”
Optional or required geocoding with multiple providers :white_check_mark: โ€”
Category and site-wide topic map views :white_check_mark: โ€”
User locations on posts, profiles, cards, and the directory map :white_check_mark: โ€”
Leaflet users map with local name and username search :white_check_mark: โ€”
Configurable location labels, flags, map markers, clustering, and tiles :white_check_mark: โ€”
Default a new topic to the current userโ€™s location :white_check_mark: โ€”
Automated IP-based user-location estimation โ€” :white_check_mark: Exclusive
Nearby-topic discovery based on the current userโ€™s location โ€” :white_check_mark: Exclusive
Optional location-aware Discourse Chatbot tools โ€” :white_check_mark: Exclusive
Permission-aware group and result-limit users-map filters โ€” :white_check_mark: Exclusive
Interactive WebGL users-map globe โ€” :white_check_mark: Exclusive
Idle globe screen saver โ€” :white_check_mark: Exclusive

Installing Pro adds its exclusive features to the base functionality; it does not replace the base plugin.

Configuration

The base pluginโ€™s settings use the location_ prefix and control topic locations, geocoding, map display, user locations, and the standard users map.

Useful documentation:

Privacy and storage

Users choose whether to save a profile location. Complete editable topic and user locations remain in base-owned custom fields, while plugin-owned projection tables support spatial queries and map ordering.

Raw location custom fields are not made globally public. Topic, profile, card, post, and directory responses expose only the location data required by that surface and respect Discourseโ€™s profile and group visibility rules.

Pro extension

Discourse Locations Pro is an optional extension available to GitHub Sponsors as a thank-you for supporting ongoing development. Individual and independent-community sponsors receive access from the $7/month Bronze tier; businesses and institutions must sponsor at the $40/month Silver tier or above. Eligible sponsors receive private-repository installation instructions.

The Pro extension adds automated IP lookup, Nearby topics, Chatbot tools, enhanced users-map filters, the interactive globe, and the globe screen saver. Each optional automation or integration remains disabled until configured, and the Pro master setting can disable all Pro behaviour without disabling the base plugin.

Sponsor on GitHub to get Locations Pro

110๊ฐœ์˜ ์ข‹์•„์š”
OpenStreet maps embedding
Learn how to build Discourse plugins by helping me
Job exception: undefined method `name' for
A plugin to "check" a portion of a post before it can be posted
Suitability of Discourse for Discussion on Page
Locations dropdown (Google maybe?)
Enable tagging only in some categories
My 2nd Discourse forum, 2 years after the first one
How to add custom fields to models
2020: The Year in Review
Angus' Events Plugin :calendar:
Listing users by group - ERROR: missing FROM-clause entry for table "groups"
2021: The Year in Review
A "Votes" option for the top menu in main page
Forum Completely Broken 2.8.5
It's Time We Talked About Tags
Who use event plugin in their discourse community?
Automated map
Configure plugin Custom Wizard for autoposting
2022: The Year in Review
Show a modal dialog after clicking toolbar button via a plugin
Must have plugins and components for Discourse?
Getting a 500 error on the mobile for bookmark and some category pages
Get aggregate user location data from IP addresses?
Could a List of Recommended Topics Be Added to the Top Menu?
2023: The Year in Review
ยฟCรณmo encuentro a una persona en Discourse?
Angus' Events Plugin :calendar:
Usercard Redesign Experiment
Is it possible to add a location and display them on a map?
Generating an ical to use with a custom map
Remove overriding of cmd/ctrl-f
Locate a feature like the one shown in the photo
Discourse.fontawesome-6-upgrade needs updating
2024: The Year in Review
Migrated my old custom-built trail-journal/blog to Discourse
Newly created topic shown location based on device
Alternative post templates
What happens next?
Discourse-events 'this.router' error
่ฏทๆ•™ๅ…ณไบŽMaxMind ้”™่ฏฏๆ—ฅๅฟ—้—ฎ้ข˜
National Flags
How minimal is your forum?
Layouts Plugin
Suggestions on how I can have hundreds of small groups (e.g. streets in a town)?
Problรจme accรจs aux onglets des paramรจtres des catรฉgories
Discourse Events
Topic List Previews (legacy)
New Theme: Tag-Pages Navigation
Locations plugin modifications
Traditional multi level hierarchy vs flat discourse hierarchy
More options to filter users on users page
Project ideas for Google Summer of Code 2018
Traditional multi level hierarchy vs flat discourse hierarchy
Any way to display Location below the name in posts?
Developing with Discourse
Calendar plugin features to make it really useful for us
Learn how to build Discourse plugins by helping me
Developing
Discourse-common asset availability: difference between development and production?
2018: The Year in Review
Object instead of users due to locations plugin
Inserting a date with Paris timezone gives me Berlin
Failed building stable due to 3rd party plugin
Angus' Events Plugin :calendar:
How to make a topic filter based on current user group and topic location
2019: The Year in Review
United states map
Fig - Native Discourse client for iOS
Loading slider issues

์ €๋Š” ์ด ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ๋งค์šฐ ์ดˆ๋ณด์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ–ˆ๋Š”๋ฐ (ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด์—์„œ Map ๋ช…๋ น์–ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ํŽ˜์ด์ง€์— ์œ„์น˜ ํ•„๋“œ๊ฐ€ ์žˆ๊ณ  nominatim์„ ํ†ตํ•œ ์ง€๋ฆฌ ์ฐธ์กฐ๋„ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค) ๊ทธ๋Ÿฐ๋ฐโ€ฆ

์—๋””ํ„ฐ์—์„œ โ€œ์œ„์น˜ ์ถ”๊ฐ€โ€ ๋ฒ„ํŠผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ œ ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์—๋””ํ„ฐ ์ฐฝ์ž…๋‹ˆ๋‹ค:

๋งˆ์ง€๋ง‰์œผ๋กœ, ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-math.git
          - git clone https://github.com/paviliondev/discourse-events.git
          - git clone https://github.com/paviliondev/discourse-locations.git
          - git clone https://github.com/davidtaylorhq/discourse-whos-online.git
          - git clone https://github.com/discourse/twitter-profile-link.git
          - git clone https://github.com/discourse/discourse-tooltips.git

locale= en์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‹œ๋„ํ•ด ๋ณด์•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

์Œ, ์Œ, ์ˆ˜์ • ์‚ฌํ•ญ: ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋„์— ๋”ฐ๋ฅด๋ฉด, ์ €๋Š” ์ฃฝ์€ ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ์ง€๋„๊ฐ€ ๋ชฌํŠธ๋ฆฌ์˜ฌ ์ตœ๋Œ€ ๊ทœ๋ชจ์˜ ๋ฌ˜์ง€ ํ•œ๊ฐ€์šด๋ฐ์— ์ง€์ ์„ ํ‘œ์‹œํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ :

13๊ฐœ์˜ ์ข‹์•„์š”

์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6๊ฐœ์˜ ์ข‹์•„์š”

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ฒดํฌ ํ‘œ์‹œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ โ€œ์ผœ์ ธโ€ ์žˆ์—ˆ์ง€๋งŒ!! ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ์„ค์ • ํŒจ๋„์„ ํ‘œ์‹œํ•œ ํ›„ ์ฒดํฌ๋ฅผ ํ•ด์ œํ•˜๊ณ  ๋‹ค์‹œ ์ฒดํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

๋™์ž‘ํ•˜๋Š” ๊ฑธ ํ™•์ธํ•ด์„œ ๋‹คํ–‰์ด์—์š”. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•œ์ฐธ ๋™์•ˆ ์•ˆ ์จ์„œ ๋Œ€์ถฉ ์ถ”์ธกํ•œ ๊ฑฐ์˜€๊ฑฐ๋“ ์š”.

3๊ฐœ์˜ ์ข‹์•„์š”

@angus ์ตœ๊ทผ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์— ์œ„์น˜๊ฐ€ ์ž…๋ ฅ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค:

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์ •ํ™•ํ•œ ํŒจํ„ด์„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

ํ˜น์‹œ ํ”„๋กœํ•„์—์„œ ์œ„์น˜๋ฅผ ์‚ญ์ œํ•œ ์‚ฌ์šฉ์ž๋“ค์ผ๊นŒ์š”? ์•„๋‹ˆ๋ฉด NULL ๋Œ€์‹  ๋นˆ ๋ฌธ์ž์—ด(์˜ˆ: โ€œโ€)์ธ ๊ฒฝ์šฐ์ผ๊นŒ์š”? :thinking:

3๊ฐœ์˜ ์ข‹์•„์š”

์ตœ๊ทผ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ์นด๋“œ์—์„œ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์นด๋“œ:
user-card

์‚ฌ์šฉ์ž ํ”„๋กœํ•„:

3๊ฐœ์˜ ์ข‹์•„์š”

์ด ๋ฌธ์ œ๋Š” ์ฝ”์–ด์—์„œ ๋ฐœ์ƒํ•œ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค:

5๊ฐœ์˜ ์ข‹์•„์š”

@omarfilip @david ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ๋ง์”€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :+1:t2:

@angus ์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ์‹ ๊ฐ€์š”?

4๊ฐœ์˜ ์ข‹์•„์š”

@david @Richie ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง€์›ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ณง Pavilion์˜ ๋‹ค๋ฅธ ์ฃผ์š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋™์ผํ•œ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๋กœ ์ „ํ™˜๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์›” ์ฒซ ์ฃผ์— ์ตœ์‹  Discourse ์ฝ”์–ด์™€ ํ˜ธํ™˜๋˜๋„๋ก ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ถ”ํ›„ ์•ˆ๋‚ด๋“œ๋ฆฌ๋ฉฐ, ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”:

5๊ฐœ์˜ ์ข‹์•„์š”

๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ•ด ์ค˜์„œ ๊ณ ๋งˆ์›Œ, ์•ต๊ฑฐ์Šค.

4๊ฐœ์˜ ์ข‹์•„์š”

์•ˆ๋…•ํ•˜์„ธ์š” @angus ๋‹˜, ์œ„์น˜๊ฐ€ ์ด์ œ ์‚ฌ์šฉ์ž ์นด๋“œ์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์œ„์น˜๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ์ง€๋„ ํ•€๊ณผ ์ง€๋„ ์•„์ด์ฝ˜์ด ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

๊ทธ๋ฆฌ๊ณ  ์ „์ฒด ํ”„๋กœํ•„ ํŽ˜์ด์ง€์—์„œ๋„:

4๊ฐœ์˜ ์ข‹์•„์š”

ํ˜„์žฌ locations ํ”Œ๋Ÿฌ๊ทธ์ธ ๋•Œ๋ฌธ์— Discourse ์•ฑ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋กœ๊ทธ๋ฅผ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. app.yml์—์„œ locations๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ˆ˜์ •ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋˜ํ•œ, ๋ฉ”์ธ Discourse ์•ฑ์ด ๊ทธ๋Ÿฌํ•˜๋“ฏ, ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•œ ๋ฒ„์ „์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ๋งŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ž์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Log
5: from /var/www/discourse/plugins/discourse-layouts/plugin.rb:49:in `block in activate!'
4: from /var/www/discourse/lib/discourse_event.rb:13:in `trigger'
3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
2: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
1: from /var/www/discourse/lib/discourse_event.rb:14:in `block in trigger'
/var/www/discourse/plugins/discourse-locations/plugin.rb:234:in `block in activate!': uninitialized constant DiscourseLayouts::WidgetHelper
Did you mean?  DiscourseLayouts::WidgetSerializer (NameError)

** INCOMPATIBLE PLUGIN **

You are unable to build Discourse due to errors in the plugin at
/var/www/discourse/plugins/discourse-locations

Please try removing this plugin and rebuilding again!
I, [2020-04-25T20:32:06.399307 #1]  INFO -- : gem install icalendar -v 2.4.1 -i /var/www/discourse/plugins/discourse-events/gems/2.6.5 --no-document --ignore-dependencies --no-user-install
HEADS UP! iCalendar 2.0 is not backwards-compatible with 1.x. Please see the README for the new syntax

HEADS UP! icalendar 2.2.0 switches to non-strict parsing as default. Please see the README if you
rely on strict parsing for information on how to enable it.

ActiveSupport is required for TimeWithZone support, but not required for general use.
Successfully installed icalendar-2.4.1
1 gem installed
gem install geocoder -v 1.4.4 -i /var/www/discourse/plugins/discourse-locations/gems/2.6.5 --no-document --ignore-dependencies --no-user-install
Successfully installed geocoder-1.4.4
1 gem installed

I, [2020-04-25T20:32:06.400580 #1]  INFO -- : Terminating async processes
I, [2020-04-25T20:32:06.400773 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/10/bin/postmaster -D /etc/postgresql/10/main pid: 50
I, [2020-04-25T20:32:06.400979 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 167
167:signal-handler (1587846726) Received SIGTERM scheduling shutdown...
2020-04-25 20:32:06.401 UTC [50] LOG:  received fast shutdown request
2020-04-25 20:32:06.403 UTC [50] LOG:  aborting any active transactions
2020-04-25 20:32:06.406 UTC [50] LOG:  worker process: logical replication launcher (PID 59) exited with exit code 1
167:M 25 Apr 2020 20:32:06.406 # User requested shutdown...
167:M 25 Apr 2020 20:32:06.406 * Saving the final RDB snapshot before exiting.
2020-04-25 20:32:06.409 UTC [54] LOG:  shutting down
2020-04-25 20:32:06.439 UTC [50] LOG:  database system is shut down
167:M 25 Apr 2020 20:32:06.502 * DB saved on disk
167:M 25 Apr 2020 20:32:06.502 # 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 13098 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
b5a02d7f9df6b6a9dc160e269de30eef49bb0aeaf5dcb1b712bab5e6edad4030
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
root@discuss:/var/discourse#
3๊ฐœ์˜ ์ข‹์•„์š”

@k4rtik ์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํŽธ์„ ๊ฒช์œผ์…จ๋‹ค๋‹ˆ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. layouts ํ”Œ๋Ÿฌ๊ทธ์ธ์ด 2์ผ ์ „์— ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  2. locations ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ธฐ์กด layouts ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „์„ ์ง€์›ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  3. ๋‘ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ชจ๋‘ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.
  4. layouts ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ดˆ๊ธฐ ์—…๋ฐ์ดํŠธ์™€ locations ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ง€์›์ด ์ถ”๊ฐ€๋˜๊ธฐ ์‚ฌ์ด์— Discourse๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

locations ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ƒˆ๋กœ์šด layouts ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „์„ ์ง€์›ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค: Update to support layouts v0.2 ยท merefield/discourse-locations@52aec30 ยท GitHub. ์ด์ œ ๋‘ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋ชจ๋‘ ์„ค์น˜๋œ ์ƒํƒœ์—์„œ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @Richie ์ด ๋ฌธ์ œ๋กœ ์ธํ•œ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๋‹ค: Add include? to geo_json in user_card serializer ยท merefield/discourse-locations@5185063 ยท GitHub

์ด๋Ÿฌํ•œ ํŠน์ • ์ƒํ™ฉ์ด๋‚˜ ๊ธฐํƒ€ ์ƒ๋‹น์ˆ˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ์ƒํ™ฉ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— tests-passed ๋ธŒ๋žœ์น˜๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋„์›€์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์–‘ํ•œ ์ฃผ๊ธฐ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์กฐํ•ฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. 5์›” 1์ผ๋ถ€ํ„ฐ 5์ผ๊นŒ์ง€ ๋งค์›” ์ฒซ 5์ผ ๋™์•ˆ, Pavilion์˜ ์ฃผ์š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ(์ด ํ”Œ๋Ÿฌ๊ทธ์ธ, Events, Topic List Previews ๋“ฑ)์ด Discourse์™€ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก 24์‹œ๊ฐ„ ์ฃผ๊ธฐ์˜ ์ผ์ •์„ ์šด์˜ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด try.thepavilion.io์˜ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ Discourse ์ž์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™•์‹ค์„ฑ์ด ๋†’์•„์ง€๋Š” ์•ˆ์ „ํ•œ ์—…๋ฐ์ดํŠธ ๊ธฐ๊ฐ„์„ ํ™•๋ณดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ Discourse ๊ฐ„์˜ ์ถฉ๋Œ์„ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ 24์‹œ๊ฐ„ ์ด๋‚ด์— ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

  2. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด์— ์ž ์žฌ์ ์œผ๋กœ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ด ๊ธฐ๊ฐ„ ๋ฐ–์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ด ์ •์ฑ…์€ ์—ฌ๊ธฐ์— ๋‚˜์—ด๋œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค:

์ด ๋ชฉ๋ก์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”: https://try.thepavilion.io.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ํŽธํ•˜๊ฒŒ DM์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ thepavilion.io๋ฅผ ํ†ตํ•ด ์ €ํฌ์—๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”.

8๊ฐœ์˜ ์ข‹์•„์š”

๊ณ ๋งˆ์›Œ์š”, ๋„ค, ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ ์ดํ›„๋กœ ์™œ ์ปค์Šคํ…€ ๋ ˆ์ด์•„์›ƒ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”์ง€ ์•Œ์•„๋ณด๊ณ  ์žˆ์—ˆ๊ฑฐ๋“ ์š”. ๊ทธ๋ž˜๋„ ์•„์ง์€ ์•ˆ ๋ณด์ด์ง€๋งŒ, Pavilion์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ๊ณผ์ •์— ์žˆ๋‹ค๋Š” ๊ฑธ ํ™•์ธํ–ˆ์œผ๋‹ˆ, ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ ค๋ณผ๊ฒŒ์š”.

2๊ฐœ์˜ ์ข‹์•„์š”

@angus ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค - ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค :clap:t2:

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์ง€์†์ ์ธ ์ง€์›์— ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค :smiley:

4๊ฐœ์˜ ์ข‹์•„์š”

์•ˆ๋…•ํ•˜์„ธ์š” @angus. ์ด ์Šค๋ ˆ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๊ธ€์ด ์ˆ˜์ •๋˜์—ˆ๋‹ค๋Š” ์•Œ๋ฆผ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋‘๊ฐ€ discourse ์„ค์ •์„ ์ƒˆ ์œ„์น˜๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ๊ธฐ์กด/๊ธฐ์กด ์œ„์น˜๋„ ๊ณ„์† ์—…๋ฐ์ดํŠธ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ์Šค ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋‚˜์š”?

3๊ฐœ์˜ ์ข‹์•„์š”

Hey @Richie, ๊ธฐ์กด URL์ธ https://github.com/angusmcleod/discourse-locations๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ด์œ ๋กœ ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๋“ฑ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ธฐํšŒ๊ฐ€ ์žˆ์„ ๋•Œ ์—…๋ฐ์ดํŠธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์–ผ๋งˆ ์ „ ์ œ ๊ฐœ์ธ GitHub์—์„œ Pavilion์˜ GitHub์œผ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๊ฐ€ ์ด์ „๋˜๋ฉด GitHub์ด ์ž๋™์œผ๋กœ ๊ธฐ์กด ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ชจ๋“  ๋งํฌ๋ฅผ ์ƒˆ ์œ„์น˜๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์€ ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ๋™์•ˆ ์กฐ๊ธˆ ๋” ๋ณ€๊ฒฝ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. thepavilion.io์— ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์ด๊ณณ ๋ฉ”ํƒ€์—๋Š” ๋” ์งง์€ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

ํ›Œ๋ฅญ๋„ค์š”, ๊ทธ๊ฑธ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค :+1:t2:

๋‹ค์‹œ ํ•œ๋ฒˆ ๋„์›€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

3๊ฐœ์˜ ์ข‹์•„์š”