여러분 안녕하세요, 제가 관리하는 포럼 중 하나에서 이상한 문제가 발생했습니다.
업그레이드 중 관리 페이지(admin/upgrade)나 터미널에서 실행을 시도했는데 실패했고, 다음과 같은 오류가 발생했습니다:
--------------------------------------------------------------------------------
1 migrations failed!
Failed to migrate default
#<ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_screened_ip_addresses_on_ip_address"
DETAIL: Key (ip_address)=(10.0.0.0/8) already exists.
다행히 포럼이 망가지지는 않았습니다. ./launcher restart app 명령으로 재시작했고(예전에 재시작 후 흰 화면이 뜰 때 ./launcher destroy app / ./launcher start app으로 문제를 해결한 적이 있습니다), 따라서 긴급한 상황은 아닙니다. 그래서 도움을 요청드립니다.
데이터베이스를 조사해 보니 10.0.0.0/8 IP에 대한 몇 가지 참조가 있는데, 이는 로그처럼 보입니다. 하지만 screened_ip_addresses 테이블에는 중복 항목이 없습니다.
--
-- TOC entry 6829 (class 0 OID 382198)
-- Dependencies: 657
-- Data for Name: screened_ip_addresses; Type: TABLE DATA; Schema: public; Owner: -
--
COPY public.screened_ip_addresses (id, ip_address, action_type, match_count, last_match_at, created_at, updated_at) FROM stdin;
236 10.0.0.0/8 2 0 \N 2020-05-24 19:44:41.587257 2020-05-24 19:44:41.587257
237 192.168.0.0/16 2 0 \N 2020-05-24 19:44:47.150337 2020-05-24 19:44:47.150337
239 172.16.0.0/12 2 0 \N 2020-05-24 19:44:57.347656 2020-05-24 19:44:57.347656
240 fc00::/7 2 0 \N 2020-05-24 19:45:02.270948 2020-05-24 19:45:02.270948
261 154.71.107.147 1 0 \N 2020-06-05 13:15:17.718236 2020-06-07 00:27:57.204765
257 154.126.107.81 1 0 \N 2020-06-02 09:51:31.191431 2020-06-07 00:27:58.538628
259 197.1.186.242 1 0 \N 2020-06-05 08:39:52.218198 2020-06-07 00:27:58.985867
258 89.158.72.7 1 0 \N 2020-06-02 20:44:41.584317 2020-06-07 00:27:59.542337
260 196.179.229.13 1 0 \N 2020-06-05 08:39:52.227515 2020-06-07 00:28:00.288445
238 127.0.0.0/8 2 0 \N 2020-05-24 19:44:52.369958 2020-05-24 19:44:52.369958
포럼 관리자는 /admin/logs/screened_ip_addresses 페이지에서 일부 IP를 정리하고 몇 개를 추가했다고 말했습니다. 하지만 그가 이 IP를 건드렸을 것 같지는 않습니다. 이상한 점은 이 IP가 14일 전에 추가되었다고 표시된다는 것입니다(마지막으로 업그레이드한 시기로, 아마도 postgresql 업그레이드였을 것입니다). 그런데 포럼은 2015년에 만든 것입니다. 다른 포럼에서는 생성 날짜를 기준으로 확인합니다.
즉, 테이블이 약간 어지러워진 것 같지만, 실제로는 그렇지 않아 보입니다.
SQL에는 능숙하지 않으므로 무리하게 시도하고 싶지 않습니다. 따라서 안전하게 업그레이드할 수 있도록 따를 절차에 대한 지침을 요청드립니다 ![]()
/admin/logs/screened_ip_addresses 페이지를 정리하거나, 이 테이블 또는 다른 테이블의 항목을 삭제(purge)해야 할까요?
