Элементы общей папки Rails, недоступные в производстве
У меня есть несколько элементов, которые доступны только в режиме разработки в каталоге /public
моего приложения: favicon.ico
, robots.txt
.
Я могу рассмотреть их в разработке, например. localhost:3000/favicon.ico
. Однако, когда я нажимаю на производство, активы не видны на этих путях. В результате у меня нет значка favicon, и google не может найти файл robots.txt, между прочим.
Как я могу исправить это, чтобы каталог /public
был доступен через соответствующие URL-адреса?
Ответы
Ответ 1
Добавьте следующую строку в app/config/environments/production.rb
config.serve_static_assets = true
Вот что должно сказать Rails Guides
config.serve_static_assets настраивает Rails для обслуживания статических активы. Значение по умолчанию равно true, но в рабочей среде как серверное программное обеспечение (например, Nginx или Apache), используемое для запуска вместо этого приложение должно использовать статические активы. В отличие от установите для этого значение true при работе (абсолютно не рекомендуется!) или тестирование вашего приложения в режиме производства с помощью WEBrick. В противном случае вы не будете быть в состоянии использовать кеширование страниц и запросы на файлы, которые существуют регулярно под общим каталогом все равно попадет в ваше приложение Rails.
Ответ 2
Rails 5.1
Добавьте следующую строку в app/config/environments/production.rb
config.public_file_server.enabled = true
Обновление
config/environments/production.rb
содержит строку:
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
Это означает, что вы можете передать RAILS_SERVE_STATIC_FILES
в командной строке при запуске сервера рельсов, например:
RAILS_ENV=production RAILS_SERVE_STATIC_FILES=yes rails s -b 0.0.0.0 -p 3000