Locations Plugin ๐ŸŒ

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์•„์ง ์ž๊ธˆ ์ง€์›์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ์žˆ์–ด ๊ทธ ๋ฏธ๋ž˜๊ฐ€ ๋‹ค์†Œ ๋ถˆํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น๋ถ„๊ฐ„ ๋‹ค์Œ ํ•ญ๋ชฉ๋“ค์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค:

@viddekla ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Locations๊ฐ€ ํ›Œ๋ฅญํ•˜๊ณ  ์ œ๊ฐ€ ์—ฌ๊ธฐ์„œ ์ข‹์€ ์ผ์„ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ ๋‹ค๋ฉด ์ปคํ”ผ ํ•œ ์ž”์„ ์‚ฌ์ฃผ์„ธ์š” :coffee:

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

์œ„์น˜ ์„ ํƒ๊ธฐ์—์„œ ์œ„์น˜ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด, ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ์ƒˆ ๋ฒ„ํŠผ์ด ์ฃผ์ œ ์œ„์น˜์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. :+1:

์Šคํƒ€์ผ๋ง๋งŒ ์กฐ๊ธˆ ์กฐ์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค โ€ฆ

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

์ค‘์š”ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •, ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ์ฃผ์„ธ์š”:

(์ด๋ฒˆ ์ฃผ๋ง ํŒจ์น˜ ์ดํ›„ ์ž…๋ ฅ๋œ ์‚ฌ์šฉ์ž ์œ„์น˜์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค)

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

์ž˜ํ•˜์…จ๋„ค์š”! ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์•„๋ž˜์— ๊นจ์ง„ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•˜๋‚˜ ๋” ๋ณด์ธ๋ฐ, ํ˜น์‹œ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”?

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

์ด๊ฒƒ์ด Locations Plugin ๐ŸŒ ์—์„œ ์˜จ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

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

๋„ค, ์ด์ œ ๋‘˜ ๋‹ค ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Locations ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ๋Š” ๊ตญ๊ฐ€ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—, ์ด์— ๋งž์ถฐ ๊ตญ๊ธฐ๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ์š”?

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

@merefield ๊ตญ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

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

Locations์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๊ตญ๊ฐ€ ์ฝ”๋“œ(country codes)๋Š” ์†Œ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์„œ๋“œํŒŒํ‹ฐ ๋ฐ์ดํ„ฐ ์ œ๊ณต์—…์ฒด์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ํ™•์ธ์ด ํ•„์š”ํ•˜์‹  ๋ถ„๊ป˜๋Š” ์œ ๋ฃŒ ์ง€์›์„ ์ œ๊ณตํ•˜๋ฉฐ, PR๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ ๊ทธ๊ฑฐ์˜ˆ์š”. ์†Œ๋ฌธ์ž๋กœ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋‹ˆ ๋กœ๋“œ๋์–ด์š”. Mapquest์™€ Mapbox๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. Rob, ๊ฐœ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์ •๋ง ๋ฉ‹์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ง€๋„์— ๋‚ด ์ฃผ์ œ์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์€๋ฐ, ํ˜„์žฌ๋Š” ์œ„์น˜๋งŒ ํ‘œ์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•  ์„ค์ •์ด ์žˆ์„๊นŒ์š”?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

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

์ผ๋ถ€ ์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค:

@Renato ๋‹˜์ด ์นดํ…Œ๊ณ ๋ฆฌ ์„ค์ •์˜ ๋ฌธ์ œ๋ฅผ ์นœ์ ˆํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด ์ฃผ์…จ์Šต๋‹ˆ๋‹ค:

๋Ÿฌ์‹œ์•„์–ด ๋ฒˆ์—ญ์— ๋Œ€ํ•œ ๊ธฐ์—ฌ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋งˆ์ง€๋ง‰์œผ๋กœ, '๊ทผ์ฒ˜(Nearby)'๋ผ๋Š” ์‹คํ—˜์ ์ธ ์ƒˆ๋กœ์šด ํ† ํ”ฝ ๋ชฉ๋ก ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค:

์ด ํ•„ํ„ฐ๋Š” ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ ์œ„์น˜์—์„œ x km(์„ค์ • ๊ฐ’) ์ด๋‚ด์˜ ๋ชจ๋“  ํ† ํ”ฝ์„ ๋ชฉ๋ก์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

@Barney_Lodge ๋‹˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ์ด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๊ณ , ์ผ์š”์ผ ๋Œ€๋ถ€๋ถ„์„ ์ด ์ž‘์—…์— ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค :slight_smile:

์ด ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๋ชจ๋‹ฌ์—์„œ ํ† ํ”ฝ์˜ ์ธ๋ผ์ธ ์œ„์น˜ ์„ ํƒ๊ธฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์˜คํ˜ธ!! Discourse๊ฐ€ ์ •๋ง ๋งˆ์Œ์— ๋“ค์–ด์š”!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

Barney Lodge

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

๊ณผ๊ฑฐ์˜ ์ตœ๊ทผ ๋ฆด๋ฆฌ์Šค์—์„œ UserLocation ์ƒ์„ฑ ๋กœ์ง์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ, ์ผ๋ถ€ ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์„ ๋ฏธ์ณค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, ํ–ฅํ›„ ์ง€๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Rails ์ฝ˜์†”์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)

๊ฒฐ๊ณผ๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค:

array_for_fix.each do |id|
  Locations::UserLocationProcess.upsert(id)
end

๋˜ ๋‹ค๋ฅธ ์ˆ˜์ • ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž ์ง€๋„ ์œ„์น˜๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋‹ค์‹œ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ–ฅํ›„ ์‚ฌ์šฉ์ž ์œ„์น˜ ํŽธ์ง‘ ์‹œ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ์ˆœํžˆ ๋ฎ์–ด์“ฐ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

๋ถˆํŽธ์„ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋˜๋Š” ๋ ˆ์ดํฌ ํƒœ์Šคํฌ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์‹ค ๋ถ„์ด ์žˆ๋‹ค๋ฉด, PR์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

์‚ฌ์šฉ์ž๊ฐ€ ์Šค๋ ˆ๋“œ๋‚˜ ๋‹ต๋ณ€์„ ๊ฒŒ์‹œํ•˜๋ฉด, ํ˜„์žฌ IP ์ฃผ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ์Šค๋ ˆ๋“œ/๊ฒŒ์‹œ๋ฌผ์—์„œ ์•„๋ฐ”ํƒ€ ์•„๋ž˜์— ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ํ”„๋กœํ•„์—์„œ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์œ ๋ฃŒ ์ง€์›์„ ์ œ๊ณตํ•  ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€ํ›„(ZHIHU)์™€ ๊ฐ™์€ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

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

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

ํ•˜์ง€๋งŒ ๊ทธ ํ•„์š”์„ฑ์€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์œ„์น˜ ์ˆ˜์ง‘์ด ํ›จ์”ฌ ๋” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋Œ€ํ•œ ์˜์กด๋„๋„ ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์—๋Š” ์ด๋ฏธ ์‚ฌ์šฉ์ž ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒŒ์‹œ๋ฌผ ๋ผ๋ฒจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ถ€๋ถ„์€ ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œ ์ž‘์„ฑ ์‹œ ์‚ฌ์ดํŠธ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉ์ž ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋œ๋‹ค๋ฉด ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค:

  • ์‚ฌ์ดํŠธ๊ฐ€ ์•ฝ๊ด€(T&C)์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์น˜๋Š” ์ถฉ๋ถ„ํžˆ ๋Œ€๋žต์ ์ธ ์ˆ˜์ค€์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋„์‹œ ์ˆ˜์ค€๊นŒ์ง€? ์ œ ์ƒ๊ฐ์— ์‚ฌ์šฉ์ž๋ฅผ ๊ฑฐ๋ฆฌ ๋‹จ์œ„๋กœ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์ดํŠธ์˜ ํ˜ธ๊ฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์ƒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋„์‹œ, ์ฃผ(์„ฑ), ๋˜๋Š” ๊ตญ๊ฐ€ ์ˆ˜์ค€์œผ๋กœ ์„ธ๋ถ„ํ™”(granularity)๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ด€๋ฆฌ์ž๋ถ„๋“ค์˜ ์˜๊ฒฌ๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Discourse ์ฝ”์–ด์— ๋‚ด์žฅ๋œ ํ‘œ์ค€ IP ์ง€์˜คํ† ๋ ˆ์ด์…˜ ์„œ๋น„์Šค์ธ MaxMind๋ฅผ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ด์ƒ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์ดํŠธ ์˜ต์…˜์œผ๋กœ ๋ฐฑ์—”๋“œ ์ž๋™ํ™” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฐ์„œ์‹ญ์„ ๊ณ ๋ คํ•ด ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•ฉ์˜์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์ธ ๋ฉ”์‹œ์ง€๋กœ ์—ฐ๋ฝ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๋„์‹œ ์ˆ˜์ค€๊นŒ์ง€๋งŒ ์ •ํ™•ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋ฆฌ๊นŒ์ง€ ์ •ํ™•ํžˆ ์•Œ๋ฉด ๋„ˆ๋ฌด ๋ฌด์„ญ์Šต๋‹ˆ๋‹ค.

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

์‚ฌ์ดํŠธ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ธ๋ถ€ ์ •๋„ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„ธ๋ถ€ ์ •๋„๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์˜ตํŠธ์•„์›ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์šด์˜ํ•˜๋Š” 2๊ฐœ์˜ ์ „๊ตญ ํฌ๋Ÿผ์—๋Š” ์ฃผ(ๅทž) ๋‹จ์œ„ ์„ธ๋ถ€ ์ •๋„๊ฐ€ ์ ํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€์—ญ ํฌ๋Ÿผ์—๋Š” ๋™๋„ค ๋‹จ์œ„ ์„ธ๋ถ€ ์ •๋„๊ฐ€ ์ ํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ดํŠธ๋“ค์„ ์‰ฝ๊ฒŒ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•ด ๋ณด๋‹ˆ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค:

discourse(prod)> array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)
=> [175, 12, 578, 1347, 1355, 1, 590]
discourse(prod)* array_for_fix.each do |id|
discourse(prod)*   Locations::UserLocationProcess.upsert(id)
discourse(prod)> end
=> [175, 12, 578, 1347, 1355, 1, 590]

๊ทธ ํ›„ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ 590์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๊ณ , ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค:

discourse(prod)> array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)
=> [590]
discourse(prod)* array_for_fix.each do |id|
discourse(prod)*   Locations::UserLocationProcess.upsert(id)
discourse(prod)> end
=> [590]

์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”? :thinking:

IP๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์œ„์น˜ ์„ค์ • ์ž‘์—…์„ @็ฅๅŒไผŸ ์™€ @nathank ๋‹˜์ด ์Šคํฐ์„œ๋กœ ๋‚˜์„œ์ฃผ์…จ๋‹ค๋Š” ์†Œ์‹์„ ์ „ํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค :money_bag:

์ด ์ž‘์—…์€ ๋‹น๋ถ„๊ฐ„ ์‹คํ—˜์ ์ธ ๋‹จ๊ณ„์— ๋จธ๋ฌผ๊ฒ ์ง€๋งŒ, ์ด๋ฏธ PR์ด ์˜ฌ๋ผ์™€ ์žˆ๋‹ค๋Š” ์ ๋„ ๊ธฐ์œ ๋งˆ์Œ์œผ๋กœ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค:

์ด๊ฒƒ์€ ๋‹จ์ˆœํ•œ ์กฐํšŒ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ ์ด์ƒ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ๋ณดํ˜ธํ•˜๋ฉด์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์‹ ๋ขฐ๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด, ์ž๋™์œผ๋กœ ๊ฒฐ์ •๋œ ๋ชจ๋“  ์œ„์น˜์˜ ํŠน์ • ์„ธ๋ถ„ํ™” ์ˆ˜์ค€(์˜ˆ: ๋„์‹œ)์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

(๋„ค, VPN๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ๋Š” ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์ด ๊ธฐ๋Šฅ์ด ์ถฉ๋ถ„ํžˆ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด ๋ณ‘ํ•ฉ(merge)ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ด ๊ธฐ๋Šฅ์€ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(feature flag) ๋’ค์— ๋ฐฐ์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์ง€๋งŒ, ์„ค๋ ˆ๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ ์˜ค๋žซ๋™์•ˆ Locations ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ ์ค‘ ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ @็ฅๅŒไผŸ ๋‹˜๊ณผ @nathank ๋‹˜๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค !!

๊ทธ๋ฆฌ๊ณ  ๋„ค, ๊ธฐ์กด ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” rake ํƒœ์Šคํฌ๋„ ๋˜ ์ถ”๊ฐ€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€ฆ

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

์ด๋Ÿฐ ๊ฒฝ์šฐ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด Discourse ๋ฐฑ์—”๋“œ์—์„œ ๊ณต์ง€์‚ฌํ•ญ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?
์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฒŒ์‹œ๋ฌผ์„ ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. :slight_smile:

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