Если вы пересобрали приложение, то изменения, внесённые в контейнер, были утеряны. Возможно, сотрудники Backblaze исправили проблему, пока вы этим занимались.
Я просто закомментировал S3 и пересобрал. Думаю, в дальнейшем буду использовать локальное хранилище.
Локальное хранилище работает нормально. Не работает только удаление.
Спасибо за публикацию и подтверждение того, что на данный момент обходного пути нет без понижения версии SDK AWS. Я столкнулся с проблемами при работе с B2 S3 API в другом проекте, использующем golang SDK AWS, пытаясь создать резервную копию базы данных VictoriaMetrics.
У вас есть какая-либо информация от вашей инженерной команды о том, как или когда они могут решить эту проблему, или есть ли способ отслеживать/получать обновления о поддерживаемом обходном пути? Я пытаюсь решить, стоит ли форкнуть проект и перекомпилировать его с изменением зависимости или просто подождать немного обновления!
Спасибо!
Следующая процедура помогла мне понизить версии AWS Gems:
# Чтобы попасть в контейнер:
./launcher enter app
# Похоже, это нужно для снятия блокировки Gemfile.lock:
bundle config set frozen false
# Установите более старую версию gem sdk-s3:
sed -i 's/gem "aws-sdk-s3", require: false/gem "aws-sdk-s3", "1.177.0", require: false/' Gemfile
# Понизьте версию gem S3 до соответствия тому, что теперь указано в Gemfile:
bundle update aws-sdk-s3
# Также понизьте версию gem aws-sdk-core:
bundle add aws-sdk-core --version 3.215.
После внесения этих изменений мне удалось успешно сохранить резервную копию в B2. Я уверен, что это лишь временное решение, которое будет утеряно при следующем обновлении Discourse, поэтому надеюсь, что @PatPatterson и команда Backblaze скоро предложат более постоянное решение проблемы совместимости.
Надеюсь, вам не придётся этого делать, но можно добавить эту команду sed в файл app.yml, чтобы она выполнялась автоматически при пересборке. Думаю, достаточно просто разместить её ниже места, где клонируются плагины. Хотя это может оказаться сложнее, чем я предполагаю.
Привет, AntiMetaman,
Я потратил последнюю неделю, пытаясь настроить резервное копирование с использованием хранилища S3, и в итоге, следуя этой теме, наконец добился успеха. Честно говоря, я не уверен, какая именно часть настройки сработала.
Я выполнил те же действия, что и вы, с удалением и установкой gem-пакетов, но теперь при загрузке изображений возникает ошибка. Мой лог ошибок показывает следующее:
not entitled /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call’ /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aw
Прежде чем я решу полностью удалить сервер и начать заново (честно говоря, на данном этапе я даже не уверен, что хочу продолжать), не могли бы вы подсказать, как отменить удаление и установку gem-пакетов, чтобы я мог проверить, решит ли это проблему?
Поведение, которое я наблюдаю на нашем экземпляре (использующем Backblaze для резервного копирования), заключается в том, что резервные копии перестали создаваться в феврале без каких-либо уведомлений. Я случайно заметил это сегодня, так как время от времени проверяю наши резервные копии. Я бы считал это довольно серьезной проблемой.
Возможно ли откатить версию AWS-SDK до предыдущей, пока не будет найден обходной путь для Backblaze и других провайдеров, отличных от AWS?
Но мне пришлось это сделать для сайта, использующего Backblaze. Я создал шаблон, который поместил в /root/aws-revert-template.yml, со следующим содержимым:
# Этот шаблон откатывает aws-sdk-s3 до версии, совместимой с Backblaze
params:
home: /var/www/discourse
hooks:
after_bundle_exec:
- exec:
cd: $home
cmd:
- bundle config set frozen false
- "sed -i 's/gem \"aws-sdk-s3\", require: false/gem \"aws-sdk-s3\", \"1.177.0\", require: false/' Gemfile"
- bundle update aws-sdk-s3
- bundle add aws-sdk-core --version 3.215
Затем я добавил его в свой app.yml следующим образом:
# ВАЖНО: УСТАНОВИТЕ СЕКРЕТНЫЙ ПАРОЛЬ в Postgres для пользователя Discourse
# TODO: замените SOME_SECRET в этом шаблоне
templates:
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
- "/root/aws-revert-template.yml"
После этого я выполнил обновление до стабильной версии, и всё, кажется, работает.
Вы также можете просто добавить содержимое шаблона в свой app.yml.
Обратили внимание, что на этой странице — S3-Compatible API — больше нет информации о том, что различные заголовки checksum-* не поддерживаются.
@PatPatterson, не уверен, что вы всё ещё в этой ветке, но было ли официально добавлена поддержка этих заголовков?
Можете подтвердить, что ваш Backblaze B2 работает без предложенного мной исправления?
Спасибо за быстрый ответ и извините — я должен был добавить больше деталей. В другом пакете с открытым исходным кодом (Mastodon) мы тоже вынуждены были ограничить версию gem aws-sdk-core условием < 3.216.0, чтобы решить эту проблему для пользователей, использующих Backblaze (и, как я подозреваю, для других, но именно в контексте Backblaze это возникло).
Однако за последние несколько недель я заметил:
- На странице Backblaze больше не перечисляют эти заголовки как неподдерживаемые.
- В одном из недавних релизов gem для AWS упоминается исправление проблемы, когда параметр
when_requiredранее не учитывался полностью.
В ходе предыдущих исследований я наткнулся на обсуждение с более или менее аналогичной проблемой и пытался понять, можно ли сейчас безопасно обновить gem, если действительно Backblaze добавил эту поддержку и/или gem теперь полностью обходит проблему.
Привет — да, Backblaze B2 официально добавила поддержку заголовков контрольных сумм в начале этого года.
Отлично! Спасибо за подтверждение.