Я постараюсь обобщить ответы на свои вопросы:
- Вступают ли Web UI и переменные окружения (ENV) в конфликт?
- Когда файлы должны быть загружены в бакет?
Добавив этот фрагмент в app.yml в секцию hooks, загрузка произойдет после этапаafter_assets_precompile(во время пересборки приложения).
- Как я могу это отладить? Я не вижу никаких ошибок в логах.
Запустив следующую команду:
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
- Можно ли указать подпапку бакета в конфигурации?
Действительно ли мне нужно использовать отдельные бакеты для загрузок и резервных копий?
Нет, не обязательно, но это обычно самый простой способ настройки. По сути, вам нужно использовать либо два разных бакета, либо префикс для бакета резервных копий. Например, будут работать следующие комбинации:
- Разные бакеты
- s3_upload_bucket:
your-uploads-bucket- s3_backup_bucket:
your-backups-bucket
- Разные префиксы
- s3_upload_bucket:
your-uploads-bucket/uploads- s3_backup_bucket:
your-uploads-bucket/backups
- После того как это заработает, будут ли ранее загруженные изображения перенесены в бакет? Если я выполню пересборку (rebake), как будут выглядеть URL ранее загруженных изображений?
Я включил загрузку через S3 в своем экземпляре Discourse (который уже работает какое-то время); что мне делать с существующими локальными загрузками?
Чтобы перенести существующие загрузки в S3, вы можете выполнить несколько rake-задач. Для этого вам нужен доступ по SSH, права root и вход в приложение Discourse (как описано в Административные пакетные операции). И еще: вам нужно установить некоторые переменные окружения в app.yml. Это не для слабонервных.
После того как вы всё это сделаете, вы готовы к выполнению rake-задач:
rake uploads:migrate_to_s3 rake posts:rebakeКак только эти задачи будут выполнены (и загрузка файлов будет работать корректно), вам больше не нужно будет включать загрузки в резервные копии. И в качестве бонуса вы сможете восстановить резервную копию из командной строки в случае катастрофы (просто храните копию app.yml в надежном месте).