2016-09-20 6 views
1

Недавно мы перенесли старый веб-сайт Rails 2.3 с сервера CentOS 6 на сервер CentOS 7. Начиная с этого перехода, несколько страниц получают кеширование, чего не должно быть.Рельсы 2.3 страницы кэшируются, когда они не должны на Passenger 5

Вот подробности об изменениях веб-сервере:

  • Старая система была Passenger 4, новый является пассажирским 5.0.30.
  • Старая система была Apache, новый является Nginx 1.10.1
  • приложение не изменилось, кроме добавления config.ru для Пассажира 5
  • Мы бежим Rails 2.3.17 на Ruby, РЗЭ
  • Мы запускаем Memcached для кэширования фрагментов, но не с этими страницами.

Вещи, которые мы попробовали:

  • Если мы изменим вид, изменения не проявляются вплоть до перезапуска. Шаблон просмотра кэшируется.
  • Мы отключили турбобашины пассажира 5. Это не помогло.
  • Мы удалили все ключи из Memcached. Это не помогло.
  • Найти и удалить на диске Rails caches - мы не нашли (и не должны).

Подробнее:

  • Мы размещаем несколько других Rails 2.3 веб-сайтов и десятки Rails 3.x/4.x сайтов и не имеют этой проблемы.
  • Если вы перезапустите Nginx или touch tmp/restart.txt, появятся изменения.
  • Файлы журнала для Nginx показывают a 200
  • Файл журнала Rails производства показывает времена для создания db и представления.

Похоже, что он генерирует выход, но затем он извлекает из своего рода кеш между Rails, Passenger и Nginx.

Что может быть причиной этого?

+0

Вы изменяете виды непосредственно в процессе производства, а не через «полный» процесс развертывания (шаг для отката сервера приложений)? И это работает для ваших других приложений? –

+0

Какие изменения сдерживаются? У меня были аналогичные проблемы в отношениях Rails 2.x, где has_many или аналогичные отношения кэша в состоянии, которое они были, когда веб-сервер был запущен (как если бы сам db кэшировался, хотя это не так). –

+0

@SergioTulentsev Мы изменили представления без полного развертывания или отскакивания от сервера. Я подозреваю, что они кэшируются путем кэширования шаблона просмотра. –

ответ

0

Это оказалось областью, которая вызывала DateTime.now, которая не была обернута в proc - Proc.new { DateTime.now }.call. Это приводит к тому, что дата будет кэшироваться вместе с моделью.

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