2012-03-30 9 views

ответ

18

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

Это добавляется только к стеку промежуточного программного обеспечения Rails if config.serve_static_assets is true. Этот параметр defaults to true, но по умолчанию генерируется config/environments/production.rb turns if off.

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

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

6

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

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