Rails ActionController :: RoutingError для загруженных ресурсов, отсутствующих в машине разработки - PullRequest
0 голосов
/ 21 мая 2018

Я обычно клонирую производственную базу данных на моей машине для разработки, чтобы максимально приблизить ENV разработки к реальной вещи, и разрабатывать / тестировать с реальными данными.

Проблема заключается в том, чтопри этом многие из моих представлений теперь имеют ссылки на ресурсы (изображения), загруженные пользователем (CarrierWave), но, поскольку мы говорим о сотнях изображений, также непрактично клонировать эти активы.

Это, однако, приводит к ужасному опыту разработчиков: каждое представление, содержащее множество этих изображений, приводит к тому, что сервер Rails обрабатывает десятки запросов, вызывающих RoutingErrors, например:

ActionController :: RoutingError (НетМаршрут соответствует [GET] "/uploads/picture/mv_files/image/000/000/051/966/51966/thumb_101__2_.jpg")

На странице с 30+, подобными этим, требуетсяболее 15 секунд, чтобы сервер Rails мог вызвать все исключения и обработать следующий запрос.

Есть идеи, как решить эту проблему?

1 Ответ

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

Через несколько минут после публикации я нашел именно то решение, которое искал в этих превосходных картах Макандры :

Рендеринг 404 с отсутствующими изображениями по маршрутам Rails Когда вызагрузите дамп для разработки, записи могут ссылаться на изображения, которые недоступны на вашем компьютере.

Запросы на эти изображения могут в конечном итоге заканчиваться в вашем приложении, например, если определен универсальный маршрут, который приводит к выполнению контроллеранемного тяжелой работы.На страницах с большим количеством пропущенных изображений это замедляет время отклика разработки.

Это можно исправить, определив маршрут Rails следующим образом:

if Rails.env.development?
  scope format: true, constraints: { format: /jpg|png|gif/ } do
    get '/*anything', to: proc { [404, {}, ['']] }
  end
end

Изображения(обычно) обслуживается напрямую из общедоступных ресурсов или ресурсов и не затрагивает ваши контроллеры / маршруты, пока существуют файлы.Если файлы отсутствуют, запрос будет обработан по указанному выше маршруту, который мгновенно отвечает пустым ответом HTTP 404.

Поэтому я просто вставил этот фрагмент в начало моего файла routes.rb и вуаля, проблема решена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...