사용자 아바타 파일을 삭제하는 방법은 무엇인가요?

이것은 어떻게 달성해야 할지 전혀 감이 안 잡히는 목표입니다. iOS 리버스 엔지니어로서, 소스 코드에서 서버가 이 이미지를 어떻게/어디서 보내는지 알면, 서버가 이 이미지를 로컬에서 어디에서 로드하는지 역추적할 수 있을 거라고 생각합니다. 하지만 저는 Ruby를 읽는 게 의사 코드(세우도 코드)를 읽는 것과 비슷할 정도라, 서버가 이 이미지를 보내는 위치를 찾는 것은 저에게 매우 큰 과제가 됩니다 :sob: 소스 코드에 익숙한 사람이라면 훨씬 쉬울 텐데 말이에요

에서 모든 사용자의 업로드를 저장하는 uploads 테이블을 확인했습니다. 사용자 ID가 1637인 Baal998 사용자의 경우, SELECT * FROM uploads WHERE user_id = '1637'; 쿼리를 실행하면 다음과 같은 결과가 반환됩니다.

  id  | user_id | original_filename | filesize | width | height |                                     url                                     |         created_at         |         updated_at         |                   sha1                   | origin | retain_hours | extension | thumbnail_width | thumbnail_height | etag | secure | access_control_post_id | original_sha1 | animated | verified | verification_status 
------+---------+-------------------+----------+-------+--------+-----------------------------------------------------------------------------+----------------------------+----------------------------+------------------------------------------+--------+--------------+-----------+-----------------+------------------+------+--------+------------------------+---------------+----------+----------+---------------------
 2210 |    1637 | 2.pic.jpg         |    60610 |       |        | /uploads/default/original/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183.jpg | 2016-08-08 09:37:13.937306 | 2018-01-05 02:38:49.498264 | cb2188eaeecc3a648f021fa00da4734bd60ca183 |        |              | jpg       |                 |                  |      | f      |                        |               |          |          |                   1
(1 row)

이는 Rails에서 Upload.find(user_avatar.custom_upload_id).url을 실행한 것과 동일한 결과입니다.

제 추측으로는 사용자가 아바타를 업로드한 후, Discourse가 원본 아바타 파일에 대해 어떤 작업을 수행하고 최적화된 파일을 다른 위치에 저장하는 것이 아닐까 싶습니다.

테이블 optimized_images에서 이 행이 의심스러웠습니다

  id   |                   sha1                   | extension | width | height | upload_id |                                          url                                           | filesize | etag | version |         created_at         |         updated_at         
-------+------------------------------------------+-----------+-------+--------+-----------+----------------------------------------------------------------------------------------+----------+------+---------+----------------------------+----------------------------
 49538 | e6dc9b0d6c18f2a4c3c0d2027534d01cfc89c84e | .jpg      |   135 |    135 |      2210 | /uploads/default/optimized/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183_2_135x135.jpg |    10968 |      |       2 | 2016-08-08 09:37:13.937306 | 2016-08-08 09:37:13.937306
(1 row)

sha1과 filesize는 https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png 와 일치하지만, 서버에는 이 파일이 존재하지 않습니다.

root@iosre:/var/discourse/shared/standalone# ls /uploads/default/optimized/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183_2_135x135.jpg
ls: cannot access /uploads/default/optimized/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183_2_135x135.jpg: No such file or directory

무엇이 잘못되었는지 전혀 모르겠습니다.

문제가 해결되었습니다:

포럼의 누군가가 이 아바타 이미지가 nginx 캐시에 proxy_cache_path 아래에 저장되어 있을 수 있다고 알려주었습니다. 보통 이 경로는 /var/nginx/cache인데, proxy_cache_path도 /var/nginx/cache도 찾을 수 없었습니다.

그분의 조언을 받아 launcher enter app 명령을 통해 discourse 앱으로 진입했고, 그제서야 nginx 캐시를 발견했습니다:

root@iosre:/var/discourse/shared# /var/discourse/launcher enter app
WARNING: Docker version 17.05.0-ce deprecated, recommend upgrade to 17.06.2 or newer.
root@iosre-app:/var/www/discourse# cd /var/nginx/cache
root@iosre-app:/var/nginx/cache# ls
0  1  2  3  4  5  6  7	8  9  a  b  c  d  e  f
root@iosre-app:/var/nginx/cache# 

그리고 모든 캐시를 삭제했습니다:

root@iosre-app:/var/nginx/cache# ls
root@iosre-app:/var/nginx/cache# 

이미지가 사라졌습니다.