Как Rails обслуживает статический контент из открытых источников? - PullRequest
14 голосов
/ 30 марта 2012

Сколько кода ruby ​​имеет отношение к предоставлению статического контента публично? Это проходит через приложение рельсов вообще? Использует ли он Rack :: Static ?

Ответы [ 2 ]

18 голосов
/ 31 марта 2012

Rails не использует Rack::Static, у него есть собственная версия, ActionDispatch::Static. Вы должны увидеть это, если вы запустите rake middleware.

Это добавляется только в стек промежуточного программного обеспечения Rails , если config.serve_static_assets имеет значение true . Этот параметр по умолчанию имеет значение true , но сгенерированный по умолчанию config/environments/production.rb отключается, если .

Идея состоит в том, что во время разработки у вас есть простой отдельный процесс, который вы можете запустить и проверить, что все работает и где производительность не является проблемой, но при развертывании в производство вы настраиваете свой веб-сервер (обычно Apache или Nginx) на обслуживать статические файлы, так как в этом дело гораздо лучше, чем в Ruby.

Если вы используете Heroku, их последний стек Cedar не использует отдельный веб-сервер для статических файлов, поэтому в рамках процесса deploy они внедряют плагин Rails для обслуживания статических ресурсов . Все, что делает этот плагин, устанавливается serve_static_assets в true.

6 голосов
/ 30 марта 2012

Это зависит. Если вы используете что-то вроде phusion passenger для запуска своего приложения, его поведение по умолчанию - использовать Apache напрямую и пропускать рельсы для любого статического контента. Если вы используете webrick (сервер rails), он будет использовать гораздо больше кода rails / rack для статического обслуживания.

Замечание: если вы используете apache / nginx с passenger: в рабочем режиме, поскольку по умолчанию apache обслуживает весь статический контент, вам нужно будет запустить приложение rake assets:precompile перед его запуском в apache, или статический контент не помещается туда, где он должен быть для apache, чтобы получить его быстро и в готовом виде.

...