이 특정 사례를 자동으로 업데이트하는 해결책을 찾았습니다. 커스텀 필드 옵션에 대한 API 업데이트 기능은 없으며, 크론 작업을 통한 서버 측 솔루션만 찾을 수 있었습니다. 저는 json 파일을 사용하지 않고 자동화를 위해 데이터베이스 항목을 사용했습니다.
사용 사례
이 자동화의 사용 사례는 사용자가 등록 시 기존 옵션을 선택할 수 있도록 하여, 더 많은 사용자가 자신의 선호도를 알릴수록 시스템이 발전하도록 돕는 것입니다. 새 사용자가 적절한 옵션을 찾을 수 없는 경우, 커스텀 텍스트 필드에 자체 텍스트를 입력할 수 있으며, 이는 다음 사용자를 위해 드롭다운 목록에 추가됩니다.
Discourse의 데이터베이스 변경 사항은 충돌을 일으킬 수 있으므로 주의해서 사용해야 하며, 경험 있는 개발자에게만 권장됩니다!
요구 사항:
- Discourse Data Explorer
- Docker를 통해 설치된 Discourse
- 데이터베이스 관리 경험
단계 1:
/admin/customize/user_fields에서 두 개의 커스텀 필드를 생성합니다. 하나는 드롭다운이고, 다른 하나는 텍스트만입니다(제 예시에서는 user_field_5를 드롭다운으로, user_field_8을 텍스트로 사용했습니다).
참고: ID는 /admin/customize/user_fields.json에서 가져올 수 있습니다.
단계 2:
입력을 확인하려면 Discourse Data Explorers를 사용하는 것이 가장 좋습니다: Discourse Data Explorer
/admin/plugins/explorer에서 새 쿼리를 생성합니다:
예: User Field Options
SELECT * FROM user_field_options WHERE user_field_id='5'
user_field_id='5’를 드롭다운 user_field_id='x’로 변경합니다. 그러면 드롭다운 옵션에 표시되는 값들이 출력됩니다.
두 번째 쿼리를 생성합니다:
예: User Custom Fields
SELECT * FROM user_custom_fields WHERE name = 'user_field_8'
'user_field_8’을 텍스트 커스텀 필드 'user_field_x’로 변경합니다. 그러면 사용자가 텍스트로 입력한 값들이 출력됩니다.
단계 3: 이는 커스텀 필드의 모든 옵션이 나열되어 있는 user_field_options 데이터베이스를 업데이트하기 위한 크론 작업의 기본 토대입니다. 제 경우 user_field_5 때문에 관련 값이 5입니다. 저는 거기에 옵션을 추가하고 싶습니다.
먼저 Discourse 디렉터리에서 bash 스크립트를 생성합니다.
cd /var/discourse
nano update_dropdown.sh
Discourse가 Docker로 실행되는 경우 다음 내용을 추가합니다:
#!/bin/bash
cd /var/discourse
docker exec -i app su postgres -c "psql discourse -c \"UPDATE user_custom_fields SET value = (SELECT value FROM user_field_options WHERE user_field_id = 5 AND user_field_options.value = user_custom_fields.value) WHERE name = 'user_field_8' AND value IS NOT NULL AND value NOT IN (SELECT value FROM user_field_options);\""
스크립트를 저장하고 실행 가능하도록 하는지 확인하세요.
chmod +x update_dropdown.sh
그런 다음 스크립트를 시작하고 테스트할 수 있습니다.
cd /var/discourse
./update_dropdown.sh
단계 4: 이를 자동화하려면 bash 스크립트를 크론 작업으로 추가해야 합니다:
crontab -e
이것은 크론 작업 편집기를 열며, 여기서 다음 줄의 코드를 추가합니다:
* * * * * /var/discourse/update_dropdown.sh
그러면 명령이 매 분마다 실행됩니다. 물론 이는 조정할 수 있으며, update_dropdown.sh를 서버의 어디에 저장했는지에 따라 경로를 조정해야 합니다.