Я занимаюсь разработкой приложения React с использованием RailsAPI в качестве бэкэнда и использую Docker с nginx-proxy для развертывания на сервере.Одна из функций - позволить пользователю загружать изображения на сервер и показывать их снова в веб-интерфейсе.Я пытаюсь использовать Active Storage для управления этими файлами и сохранения их в локальном хранилище.Однако странно, что иногда изображения были повреждены в каком-то браузере, но их можно было показать при использовании другого браузера или даже в режиме инкогнито на том же устройстве.Я уже некоторое время искал, но все еще безуспешно.Переключение хранилища на внешнее хранилище будет последним средством, поскольку это была лишь незначительная функция моего проекта.
Чтобы сделать короткую историю короткой , , прочитайте следующее резюмемоя практика.
Я использую Docker с контейнерами - 1) nginx-proxy, 2) railsapi, 3) реагирует
Внутри RailsAPI я использую ActiveStorage для хранения изображений в локальном хранилище.
При том же URL-адресе, сгенерированном с сервера RailsAPI, (например, извините за замену моего домена на поддельный, поскольку проект не может быть публичным в данный момент): https://railsapi.myprojectdomain.com/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBTQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--d9d49c5e9214e7b6ceb3247d30d8056dc1b1a1f9/015_cost%20an%20arm%20and%20a%20leg_BrightSide.jpg
Иногдаэто работает:
Иногда это просто не работает!(404):
Вот соответствующий код для справки.
Модель:
class IdiomOfTheDay < ApplicationRecord
has_one_attached :iotd_image
def image_url
if self.iotd_image.attached?
Rails.application.routes.url_helpers.rails_blob_path(self.iotd_image, only_path: true)
else
nil
end
end
end
Контроллер просто используется для создания и визуализации индекса для отправки URL-адреса изображения в формате json.
index.json.jbuilder:
json.data do
json.idiom_of_the_day do
json.image_url idiom_of_the_day.image_url
end
end
config / environment / production.rb
# Store files locally.
config.active_storage.service = :local
config.active_storage.service_urls_expire_in = 5.days
Добавляя точку, я никогда не страдал от этого, когда запускаю docker-compose локально.Это происходит только на EC.
Спасибо за чтение моего вопроса.Любой ответ будет оценен.