Настройка CSS-кэширования в Rails с помощью Passenger - PullRequest
2 голосов
/ 02 ноября 2009

Я использую Passenger и Rails ':cache => true для кэширования всех моих css в один большой файл. Развертывание осуществляется через Capistrano .

Теперь иногда (!) Сгенерированный mem all.css файл не может быть найден после перезапуска приложения (и в журнале появляется ошибка)

ActionController::RoutingError (No route matches "/stylesheets/all.css" with {:method=>:get}):
  passenger (2.2.2) lib/phusion_passenger/rack/request_handler.rb:81:in `process_request'
  passenger (2.2.2) lib/phusion_passenger/abstract_request_handler.rb:203:in `main_loop'

Размещение другого файла restart.txt вручную или cap deploy:restart решит проблему.

Это не большая вещь, но всегда утомительно проверять и исправлять. У кого-нибудь есть идея, что я делаю неправильно?

Редактировать

Мой deploy:restart выглядит так (именно то, что я делаю вручную).

desc "Restarting mod_rails with restart.txt"
task :restart, :roles => :app, :except => { :no_release => true } do
  run "touch #{current_path}/tmp/restart.txt"
end

Кроме того, я не использую никаких специальных (внешних) CSS-файлов в своем кэшировании.

<%= stylesheet_link_tag "clear", "application", "contracts", :cache => true %>

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

Эта конкретная проблема возникает, когда список таблиц стилей с параметром кэша содержит хотя бы одну внешнюю таблицу стилей. Это происходит только при первом запуске приложения.

stylesheet_link_tag "foo.css", "/bar.css", "http://example.org/file.css", :cache => true
# crash
stylesheet_link_tag "foo.css", "/bar.css", :cache => true
# OK
1 голос
/ 02 ноября 2009

В конце развертывания вы должны быть запущены (как часть задачи deploy: restart):

touch tmp/restart.txt

Это позволит Пассажиру знать, что ему необходимо перезагрузить стек Rails для нового кода, и новые таблицы стилей будут кэшироваться при первом запросе.

Как выглядит ваше текущее развертывание: задача перезапуска?

...