При использовании Active Storage сохранение изображений в локальном хранилище с помощью Docker иногда выполняет 404 - PullRequest
0 голосов
/ 12 декабря 2018

Я занимаюсь разработкой приложения 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

Иногдаэто работает: enter image description here

Иногда это просто не работает!(404): enter image description here

Вот соответствующий код для справки.

Модель:

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.

Спасибо за чтение моего вопроса.Любой ответ будет оценен.

...