Ошибка с загрузкой Paperclip Photo (S3) на мобильный в Dokku - PullRequest
0 голосов
/ 19 мая 2018

ОБНОВЛЕНИЕ

Я создал очень простое приложение, используя скрепку с моделью Person и прикрепленным аватаром.Затем я развернул его в новой капле Dokku и столкнулся с той же проблемой, что и в моем основном приложении.Затем я прочитал об ActiveStorage и подумал, что, может быть, у меня это получится, поэтому я преобразовал простое приложение для использования ActiveStorage, а не Paperclip, но у меня все еще остается та же проблема при загрузке с мобильных устройств, полученной с камеры устройства.

Это похоже на проблему с Dokku из того, что я видел (тем более, что функциональность работает на Heroku), но я действительно не знаю, куда идти дальше.У меня нет специального кода для обработки мобильных загрузок.Я использую simple_form для элементов управления формы и стандартный синтаксис image_tag для отображения.Я также использую Devise для учетных записей пользователей (которые я добавил в свое простое приложение, а также просто для репликации).Дело в том, что мои журналы ничего не показывают, когда я получаю сообщение об ошибке Dokku, как будто запрос никогда не приходит с моего телефона.

Все еще ищите помощи в этом, спасибо!


У меня есть приложение, в которое включена загрузка скрепок для дополнительных фотографий и вложений PDF-файлов в моей модели.Все отлично работает, кроме моего производственного сервера, когда я пытаюсь прикрепить файлы на мобильном устройстве (iOS).

Я использую Dokku (через DigitalOcean) для производства и Heroku для тестирования.Я использую Amazon S3 для хранения файлов.

Работает:

  • Разработка: загрузка работы с ПК (здесь нет возможности тестирования на мобильном устройстве)
  • Тест (Heroku): загрузка работает как с ПК, так и с мобильного
  • Производство (Dokku / DO): Все загрузки работают с ПК.PDF загружает работу с мобильного.Загрузка фотографий работает с мобильного телефона, если выбрать фотографию, уже существующую в телефоне.

Не работает:

  • Производство (Dokku / DO): Загрузка фотографий с мобильного телефона (с использованием встроенной функции iOS / Safari Take photo) перейдите на страницу с ошибкой в ​​Dokku.На странице с ошибкой написано: «Страница, которую вы искали, не может быть обработана».

Когда я проверял журналы приложений из Dokku, я не обнаружил никаких ошибок.Я включил мониторинг журналов в реальном времени (приложение dokku logs -t), пока я пытался загрузить их с мобильного телефона, и после того, как я нажал кнопку отправки, в журналы ничего не сообщалось, он просто перешел на страницу ошибок на моем устройстве.

Я думаю, что это проблема с моей конфигурацией Dokku / развертывания, так как она отлично работает в Heroku.Я могу что-то упустить на стороне Dokku.У меня не включен HTTPS на Heroku, так как я использую бесплатный уровень, но у меня действительно включен HTTPS на Dokku через LetsEncrypt.Я не уверен, может ли это быть причиной ошибки или нет.

В любом случае, вот некоторый соответствующий код из моего приложения.Любые идеи высоко ценится!

Model.rb

    has_attached_file :attachment,
        styles: { large: ["1000x1000>", :png], medium: ["300x300>", :png], thumb: ["100x100>", :png] }

    validates_attachment_content_type :attachment,
        content_type: [
          "image/jpg", 
          "image/jpeg", 
          "image/png", 
          "image/gif",
          "application/pdf",

          "file/txt",
          "text/plain",

          "application/doc",
          "application/msword", 

          "application/vnd.ms-excel",     
          "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
          ],
        message: "Sorry! We do not accept the attached file type"

model_controller.rb

    def transaction_params
        params.require(:transaction).permit(:trx_date, :description, :amount, :trx_type, :memo, :attachment, :attachment_file_name)
    end

config / environment / production.rb

  # Paperclip settings
  config.paperclip_defaults = {
    storage: :s3,
    s3_credentials: {
      bucket: ENV['S3_BUCKET_NAME'],
      access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
      s3_region: ENV['S3_REGION'],
      s3_host_name: ENV['S3_HOST_NAME']
    }
  }

Вывод "dokku config myapp"

AWS_SECRET_ACCESS_KEY:    **masked**
S3_BUCKET_NAME:           mybucketname
DOKKU_APP_RESTORE:        1
DOKKU_NGINX_SSL_PORT:     443
S3_REGION:                us-east-2
AWS_ACCESS_KEY_ID:        **masked**
DOKKU_APP_TYPE:           herokuish
DOKKU_NGINX_PORT:         80
DOKKU_PROXY_PORT_MAP:     http:80:5000 https:443:5000
DATABASE_URL:             **masked**
DOKKU_LETSENCRYPT_EMAIL:  **masked**
S3_HOST_NAME:             s3.us-east-2.amazonaws.com

1 Ответ

0 голосов
/ 27 мая 2018

Я определил причину ошибки, установив Postman и используя прокси-сервер для просмотра более подробной информации о клиентских запросах с моего телефона.Я обнаружил, что сервер возвращает ошибку 413 Request Entity Too Large.

После некоторых поисков я обнаружил, что мне нужно обновить конфигурацию nginx, добавив файл в каталог моего приложения

/home/dokku/<myapp>/nginx.conf.d/upload.conf

В этом файле я вставил строку:

client_max_body_size 50M;

После этого я перезапустил свой докку-контейнер, и теперь все отлично работает:)

Спасибо за помощь всем

...