# 사용자 정보 일괄 업데이트

**URL:** https://meta.discourse.org/t/update-user-information-in-bulk/220271
**Category:** Support
**Created:** [3월 7, 2022, 11:57오전 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271 "2022-03-07T11:57:51Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![cokestroke](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cokestroke/32/242007_2.png) [@cokestroke](https://meta.discourse.org/u/cokestroke)
#### Post date: [3월 7, 2022, 11:57오전 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271/1 "2022-03-07T11:57:51Z")

</div>

사용자 정보를 일괄 업데이트하는 방법이 있을까요? 이름 등 사용자 데이터의 업데이트 정보를 내보낸 뒤, 이를 다시 데이터베이스에 가져와 기존 정보를 업데이트하고 싶습니다.

관리자 패널에서 CSV 파일을 다운로드할 수는 있지만, 이 정보를 다시 Discourse에 반영하는 방법을 알고 싶습니다.

관리자 화면에서 각 사용자를 하나씩 직접 업데이트(이름 필드)하고 있었는데, 다시 들어가 보면 업데이트된 내용이 비어 있는 상태입니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [3월 7, 2022, 2:18오후 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271/2 "2022-03-07T14:18:23Z")

</div>

최고의 방법은 아마도 API를 사용하는 것일 것입니다. 하지만 CSV 파일을 읽고 rails에서 업데이트하는 스크립트를 작성하는 것도 가능합니다.

사용자 정의 사용자 필드를 업데이트하는 레이크(rake) 태스크입니다. 필요에 따라 수정하여 다른 항목도 업데이트할 수 있습니다:

```ruby

require "csv"
desc "Import user fields"
task "user_fields:import_csv", [:filename] => [:environment] do |_, args|
  puts "Filename: #{args[:filename]}"
  data = CSV.read(args[:filename], headers: true );
  data.each_entry do |row|
    puts "doing row."
    row.to_h.each do |x|
      user_id = row['user_id']
      if x.first == 'user_id'
        u = User.find(user_id)
        puts "Got user: #{u.username}"
      else
        name = x.first
        val = row[x.first]
        ucf = UserCustomField.find_by(user_id: row['user_id'], name: name)
        if ucf
          if val != ucf.value
            puts "Updating UCF: #{row['user_id']} Name: #{name}, Found #{ucf.value}}"
            ucf.update(value: val)
          end
        else
          if val
            puts "Creating UCF: #{row['user_id']} Name: #{name}, value: #{val}"
            UserCustomField.create(user_id: user_id, name: name, value: val)
          end
        end
      end
    end
  end
end

```

수정 후에는 컨테이너 내 `/var/www/discourse/lib/tasks`에 파일을 배치하고 `rake user_fields:import_csv["YOUR-CSV.csv"]`를 실행하면 됩니다.

필요에 맞게 수정하는 데 도움이 필요하시다면 CSV 파일(또는 최소한 헤더와 첫 번째 몇 행)을 이메일로 보내주시면 견적을 안내해 드리겠습니다.

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [3월 22, 2022, 1:04오전 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271/3 "2022-03-22T01:04:30Z")

</div>

해당 스크립트는 GitHub에서 확인할 수 있습니다:

> **[GitHub - pfaffman/import-user-fields-from-csv: Import Discourse custom user fields from CSV file](https://github.com/pfaffman/import-user-fields-from-csv)**
>
> Import Discourse custom user fields from CSV file

현재 사용자 커스텀 필드만 지원하며, 이름과 같은 필드는 지원하지 않습니다.

> [@cokestroke](#):
>
> 관리자 화면에서 각 사용자의 이름 필드를 꼼꼼히 업데이트했는데, 다시 들어가 보면 업데이트 내용이 공란으로 보입니다.

각 편집을 마칠 때 `저장` 버튼을 누르지 않았기 때문일 가능성이 높습니다. 언젠가 해결되었으면 하는 UI 관련 문제입니다!!

---

<div class="post-metadata">

### Author: ![cokestroke](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cokestroke/32/242007_2.png) [@cokestroke](https://meta.discourse.org/u/cokestroke)
#### Post date: [4월 27, 2022, 9:05오후 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271/4 "2022-04-27T21:05:13Z")

</div>

공백이 포함된 컬럼에서도 동작하나요, 아니면 필드에 밑줄을 사용해야 하나요? 또한 내보내기 시 첫 번째 컬럼 헤더가 user\_id가 아닌 id로 표시됩니다. 문제가 될까요?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [4월 28, 2022, 1:07오후 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271/5 "2022-04-28T13:07:39Z")

</div>

이름이 `user_field_1` 같은 형식입니다. 이는 위에서 링크된 GitHub 저장소에서 어느 정도 설명되어 있습니다.

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [4월 30, 2022, 4:28오전 UTC](https://meta.discourse.org/t/update-user-information-in-bulk/220271/6 "2022-04-30T04:28:06Z")

</div>

> [@cokestroke](#):
>
> 또한 내보내기 시 첫 번째 열 헤더가 user\_id가 아니라 id입니다. 이것이 문제가 될까요?

이 스크립트는 사용자 데이터 다운로드를 소비하도록 설계되지 않았습니다. 여러 열 헤더를 수정해야 합니다. 또한 현재 형태로 스크립트는 custom\_fields 테이블에 저장된 항목만 업데이트합니다.
