Как удалить файл аватара пользователя?

Это задача, как достичь которой я не имею ни малейшего представления. Как реверс-инженер iOS, я думаю: если я знаю в исходном коде, как и где сервер отправляет это изображение, я могу отследить процесс назад и увидеть, где сервер загружает это изображение локально. Но я читаю Ruby как псевдокод, поэтому найти место, где сервер отправляет это изображение, становится для меня огромной, огромной задачей :sob: Для человека, который хорошо знаком с исходным кодом, это должно быть гораздо проще.

В discourse/app/models/upload.rb at main · discourse/discourse · GitHub

Я увидел таблицу uploads, в которой хранятся все загрузки пользователя. Для пользователя Baal998 с ID 1637 я выполнил запрос 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)

Это то же самое, что и выполнение Upload.find(user_avatar.custom_upload_id).url в Rails.

Мое предположение: после загрузки аватара пользователем 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.

Его идея вдохновила меня: я зашёл в приложение Discourse через команду launcher enter app и нашёл кэш 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# 

Изображение исчезло.