Rails не загружает активы, находящиеся в общем каталоге в производстве
Здравствуйте, у меня есть активы в общедоступном каталоге (из-за простоты)
в макете я load
<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="/assets/css/jumbotron.css" rel="stylesheet">
<link href="/assets/css/application.css" rel="stylesheet">
а в разработке он работает хорошо, но в Производственные активы не загружены.
Мой Development.rb
Web::Application.configure do
config.cache_classes = false
config.whiny_nils = true
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.raise_delivery_errors = false
config.active_support.deprecation = :log
config.action_dispatch.best_standards_support = :builtin
config.active_record.mass_assignment_sanitizer = :strict
config.active_record.auto_explain_threshold_in_seconds = 0.5
config.assets.compress = false
config.assets.debug = true
end
Мой Production.rb
Web::Application.configure do
config.cache_classes = false
config.consider_all_requests_local = true # default false, zobrazuje errory
config.action_controller.perform_caching = false # default true
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = true # default false
config.assets.digest = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
end
Ответы
Ответ 1
Это потому, что у вас
config.serve_static_assets = false
в вашем файле production.rb
.
В Руководство по настройке Rails:
-
config.serve_static_assets
настраивает Rails для обслуживания статических активов. По умолчанию значение true, но в рабочей среде отключено, поскольку серверное программное обеспечение (например, Nginx или Apache), используемое для запуска приложения, должно вместо этого использовать статические активы. В отличие от установки по умолчанию, установите значение true при запуске (абсолютно не рекомендуется!) Или тестируйте свое приложение в режиме производства с помощью WEBrick. В противном случае вы не сможете использовать кеширование страниц и запросы на файлы, которые регулярно существуют в общедоступном каталоге, все равно попадут в ваше приложение Rails.
И как показано в этом руководстве, вы действительно не должны полагаться на обслуживание активов из public/
через ваше приложение Rails, лучше разрешить веб-серверу (например, Apache или Nginx) обрабатывать ресурсы обслуживания для производительности.
Ответ 2
Конфигурация изменена для Rails 4 и 5.
Для Rails 4:
config.serve_static_files = true
Для Rails 5:
config.public_file_server.enabled = true