Контроллер активов Rails обслуживает публичные активы вместо индексной страницы активов - PullRequest
0 голосов
/ 05 июня 2018

В моем приложении Rails у меня есть контроллер ресурсов (поскольку для модели требуется имя Asset).

Я использую resources :assets, чтобы направить свой контроллер на этот URL для отображения /assets.

Все отлично работает в режиме разработки.Однако после того, как я развернул приложение на AWS Beanstalk, оно отображает ошибку 404 от Nginx.

После просмотра файла журнала ошибок Nginx в /var/log/nginx/error.log я нашел это.

open() "/var/app/current/public/assets" failed (2: No such file or directory), client: 172.31.21.101, server: _, request: "GET /assets?status=active HTTP/1.1"

Что я понимаю из журнала, это означает, что приложение пытается найти ресурсы /var/app/current/public/assetsвместо GET /assets route.

Поэтому мой вопрос: как я могу заставить приложение обслуживать папку активов в файле представления?Или есть ли обходной путь?Одно из решений, которое я могу придумать, - это изменить папку ресурсов на другую.

1 Ответ

0 голосов
/ 05 июня 2018

Это конфликт имен создаваемых вами маршрутов.

По умолчанию ресурсы рельсов хранятся в public/assets.Затем Rails пытается использовать xsendfile (если он правильно настроен) для доставки данного ресурса из общего каталога.

Чтобы избежать этих коллизий, вы можете либо изменить свой маршрут RESTful наимя, отличное от :assets, или вы можете настроить префикс ресурса с помощью этого кода:

# config/application.rb
config.assets.prefix = '/some_other_path'

РЕДАКТИРОВАТЬ: я настоятельно рекомендую переименовать маршрут RESTful, потому что некоторые плохо написанные гемы не используют assets.prefix, ножестко закодированный /assets путь.Вложенные маршруты также могут быть хорошими, если это возможно.(Спасибо Габору Гарами)

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