Tickets Plugin ๐ŸŽŸ

์ตœ์‹  ์˜ค๋ฅ˜์˜ ์„ธ๋ถ€ ์ •๋ณด์ž…๋‹ˆ๋‹ค @RGJ

`๋ฉ”์‹œ์ง€ (9๊ฑด ๋ณด๊ณ ๋จ)

NoMethodError (undefined method `username' for #<Group id: 44, name: "Coaches", created_at: "2023-04-27 17:04:39.620341000 +0000", updated_at: "2023-04-27 17:04:39.620341000 +0000", automatic: false, user_count: 2, automatic_membership_email_domains: "", primary_group: false, title: nil, grant_trust_level: 1, incoming_email: nil, has_messages: false, flair_bg_color: "", flair_color: "", bio_raw: "All coaches who provide member coaching support in...", bio_cooked: "<p>All coaches who provide member coaching support...", allow_membership_requests: false, full_name: "Coaches", default_notification_level: 3, visibility_level: 0, public_exit: false, public_admission: false, membership_request_template: nil, messageable_level: 99, mentionable_level: 99, smtp_server: nil, smtp_port: nil, smtp_ssl: nil, imap_server: nil, imap_port: nil, imap_ssl: nil, imap_mailbox_name: "", imap_uid_validity: 0, imap_last_uid: 0, email_username: nil, email_password: nil, publish_read_state: false, members_visibility_level: 0, imap_last_error: nil, imap_old_emails: nil, imap_new_emails: nil, flair_icon: "", flair_upload_id: nil, allow_unknown_sender_topic_replies: false, smtp_enabled: false, smtp_updated_at: nil, smtp_updated_by_id: nil, imap_enabled: false, imap_updated_at: nil, imap_updated_by_id: nil, email_from_alias: nil, assignable_level: 99>)
(eval):4:in `_fast_attributes'
(eval):9:in `_fast_attributes'
app/controllers/application_controller.rb:549:in `render_json_dump'
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

๋ฐฑํŠธ๋ ˆ์ด์Šค

activemodel (7.0.4.3) lib/active_model/attribute_methods.rb:458:in `method_missing'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):4:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:343:in `as_json'
plugins/discourse-tickets/serializers/tickets/ticket_serializer.rb:29:in `assigned'
(eval):9:in `_fast_attributes'

ํ™˜๊ฒฝ

HTTP HOSTS: sandy.albacore.co`
1๊ฐœ์˜ ์ข‹์•„์š”

์งˆ๋ฌธ: ํ˜„์žฌ ์ด ์ง€์›/ํ‹ฐ์ผ“ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉ ์ค‘์ธ ๋ถ„์ด ๊ณ„์‹ ๊ฐ€์š”?

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

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

+1! ์ €๋„ ๊ถ๊ธˆํ•ด์š”!

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

์ด๊ฒƒ์ด GitHub์—๋„ ํ‹ฐ์ผ“์„ ์ƒ์„ฑํ•˜๋‚˜์š”?

์•„๋‹ˆ์š”.

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ƒ๋‹นํ•œ ๊ธฐ์—…/์ฝ”ํผ๋ ˆ์ด์…˜ ์Šคํฐ์„œ์‹ญ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ •๋ง ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค(์˜ˆ: ๊ด€๋ฆฌ์ž ์ „์šฉ์ด ์•„๋‹ˆ๋ผ ์ž„์˜์˜ ๊ทธ๋ฃน์— ๋…ธ์ถœ๋˜๋Š” ํ‹ฐ์ผ“ ๋Œ€์‹œ๋ณด๋“œ ๋“ฑ)์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š”,
์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๋‚˜์š”?
ํ‹ฐ์ผ“์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋‚˜ ํ† ํ”ฝ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋‹ค๋ฉด ํ‹ฐ์ผ“์„ ์ƒ์„ฑํ•˜๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ทœ์น™์„ ์™„ํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋Š”๋ฐ, ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋Š” Ruby์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๋งค์šฐ ์ ์–ด์„œ ์ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ž๊ฒฉ์ด ์žˆ๋‹ค๊ณ  ๋А๋ผ์ง€ ๋ชปํ•˜์ง€๋งŒ, ์ œ ๊ฐœ๋ฐœ ์‚ฌ์ดํŠธ์—์„œ ์‹œ๋„ํ•ด ๋ณธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: Allow non-staff to add and edit tickets ยท reswild/discourse-tickets@8c3d0d5 ยท GitHub

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

๋‹ค์Œ์€ Contribute > Bug @angus์ž…๋‹ˆ๋‹ค. :ticket: ํ‹ฐ์ผ“ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค:

Deprecation notice: DButton no longer supports @action as a string. Please refactor to use an closure action instead. [deprecation id: discourse.d-button-action-string] deprecated.js:55
Uncaught (in promise) TypeError: e.target is undefined
    assign task-actions.js:88
    assign tickets-controls.js:115
    Ember 2
    _triggerAction d-button.js:105
    click d-button.js:84
task-actions.js:88
3๊ฐœ์˜ ์ข‹์•„์š”

@hellekin๋‹˜, ๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ œ ์šฐ์„ ์ˆœ์œ„ ๋ชฉ๋ก์—์„œ ๊ฝค ์•„๋ž˜์ชฝ์— ์œ„์น˜ํ•ด ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ ์—…๋ฌด๋Ÿ‰์ด ๋งŽ์•„ ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ๊ฐœ์„ ๋  ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ broken ์ƒํƒœ๋กœ ํ‘œ์‹œํ•ด ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

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

DButton ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•œ Discourse 3.3์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋Š” ์ด์ œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

ํŒ€ ์—ฌ๋Ÿฌ๋ถ„๊ป˜,

Discourse 3.4.0 ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ์ƒˆ ์ฃผ์ œ ์ž‘์„ฑ ํผ์— ํ‹ฐ์ผ“ ์•„์ด์ฝ˜์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ํ‹ฐ์ผ“ ๋Œ€์‹œ๋ณด๋“œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

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

์ €๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ† ํ”ฝ์˜ ํ‹ฐ์ผ“ ์ƒ์„ฑ ๋ถ€๋ถ„์— ์˜ต์…˜์ด ์ „ํ˜€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•„์š”.

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

Priority, Status, Reason์˜ ๊ฒฝ์šฐ /tag_groups ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜์—ฌ tickets_* ๊ทธ๋ฃน์— ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

group tags
tickets_priority low, medium, high, critical
tickets_status new, in-progress, on-hold, resolved, closed, wont-fix
tickets_reason proj1, proj2, proj3, question, feedback, maintenance
2๊ฐœ์˜ ์ข‹์•„์š”

ํ•˜์ง€๋งŒ @angus๊ฐ€ ์ง€๋‚œํ•ด ์ œ์•ˆํ–ˆ๋“ฏ์ด, ์ด ์ฃผ์ œ๋Š” ๋น„ํ™œ์„ฑ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๊ณง ํ•ด๊ฒฐ๋  ๊ธฐ๋ฏธ๊ฐ€ ์—†๋Š” ๋ฏธํ•ด๊ฒฐ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ #broken์œผ๋กœ ํ‘œ์‹œํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@merefield๋Š” ๋Œ€์‹  https://meta.discourse.org/t/discourse-workflow/347110์„ ์‚ดํŽด๋ณด๋ผ๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

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

Discourse 3.5.2์— Tickets ํ”Œ๋Ÿฌ๊ทธ์ธ v0.2 (492353a20b1bc2bbcf739f1c88aaa46771e83561)๋ฅผ ์„ค์น˜ํ•œ ํ™˜๊ฒฝ์—์„œ @JayEnjoy์™€ @blazyrawr์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰๋œ ์‹คํ—˜ ๋‹จ๊ณ„ ์›Œํฌํ”Œ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์™ธ์—๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋Œ€์ฒด ๋ฐฉ์•ˆ์ด ์žˆ์„๊นŒ์š”?

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ตœ์‹  ๋ฒ„์ „์˜ Discourse์™€ ๋” ์ด์ƒ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

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

์ด๋ก ์ ์œผ๋กœ component-template-resolving ๋ฐฐ๋„ˆ๋Š” ์—ฌ์ „ํžˆ ๊ฒฝ๊ณ ์ผ ๋ฟ์ด๋ฉฐ, ๊ธฐ๋Šฅ ์†์‹ค์˜ ์›์ธ์ด ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”? ์•„๋‹ˆ๋ฉด ๋‹จ์ˆœํžˆ ๋นจ๊ฐ„์ƒ‰ ๊ฒฝ๊ณ  ๋ฐฐ๋„ˆ๋งŒ ํ™•์ธ๋˜๊ณ  ๊ณ„์‹  ๊ฑด๊ฐ€์š”?

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

๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ํ‹ฐ์ผ“ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ณ , ์ฃผ์ œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋„ โ€œํ‹ฐ์ผ“โ€ ์˜ต์…˜์„ ๋ณผ ์ˆ˜ ์—†์–ด์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฉ๊ธˆ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์—ฌ /admin/tickets๋กœ ์ง์ ‘ ์ด๋™ํ•ด ๋ณด์•˜๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค?

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ˜„๋Œ€ํ™”ํ•˜์—ฌ v2026.1์—์„œ ๋‹ค์‹œ ์ž‘๋™ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค :tada:
ํ˜„๋Œ€ํ™”๊ฐ€ ์™„์ „ํžˆ ์™„๋ฃŒ๋œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋‹ค์‹œ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ธฐ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„ํŠผ ์œ„์น˜๊ฐ€ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ด์ œ ํ‹ฐ์ผ“ ๋Œ€์‹œ๋ณด๋“œ๋Š” ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@angus PR์€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๋‚˜์‹ค ๋•Œ ๊ฒ€ํ† ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•ด ์ฃผ์„ธ์š”!

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

๋ฆฌ์ฒ˜๋“œ, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค!

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