Элементы общей папки 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