В старом проекте Rails кэширование страниц работает так, как я ожидаю от чтения документации в Интернете, в Rails 3.1 / 3.2 оно работает не так. Похоже, что Rails записывает страницы на диск, но никогда не использует их (и поэтому я предполагаю, что это кэширование страниц в памяти).
(Пожалуйста, мирись с моим длинным объяснением, это не сложно, просто тщательно ...)
В новом приложении Rails 3.2.2 у меня есть следующее:
class HomeController < ApplicationController
caches_page :index
def index
expires_in 1.year, :private => false, :public => true
end
end
Когда я запускаю свой сервер в производство и захожу на localhost, я вижу:
cache: [GET /] miss, store
Started GET "/" for 127.0.0.1 at 2012-03-02 12:19:22 -0500
Processing by HomeController#index as HTML
Rendered home/index.html.erb within layouts/application (20.0ms)
Write page /home/sheldon/Dev/rails-3.2-app/public/index.html (0.4ms)
Completed 200 OK in 30ms (Views: 28.7ms | ActiveRecord: 0.0ms)
Файл public / index.html появляется на диске.
Я использую Firefox, если я нажимаю Ctrl + R или Shift + CTRL + R, я вижу:
cache: [GET /] fresh
[2012-03-02 12:21:39] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Если я отредактирую файл public / index.html напрямую и нажму ctrl + r или ctrl + shift + r, я не вижу изменений, которые я внес в файл.
Если я открою консоль рельсов и наберу Rails.cache.clear
я увижу:
=> ["/home/sheldon/Dev/rails-3.2-app/tmp/cache/9F4", "/home/sheldon/Dev/rails-3.2-app/tmp/cache/A9A"]
Теперь, если я нажму Ctrl + R или Ctrl + Shift + R, я вижу:
cache: [GET /] miss, store
Started GET "/" for 127.0.0.1 at 2012-03-02 12:37:04 -0500
Processing by HomeController#index as HTML
Rendered home/index.html.erb within layouts/application (0.0ms)
Write page /home/sheldon/Dev/rails-3.2-app/public/index.html (0.3ms)
Completed 200 OK in 2ms (Views: 1.2ms | ActiveRecord: 0.0ms)
А мои изменения в public / index.html перезаписываются.
Похоже, что public / index.html никогда не используется.
Если я отредактирую html-файл, найденный в tmp / cache (в выводе консоли выше), а затем ctrl + r или ctrl + shift + r, я все равно не увижу изменения, внесенные мной непосредственно в файл tmp / cache. 1029 *
Если я установлю config.cache_store = :file_store, Rails.public_path + "/cache"
, поведение будет идентичным.
В руководстве по началу работы с Rails говорится, что «Rails будет доставлять любой статический файл в публичный каталог в предпочтение перед любым динамическим контентом, который мы генерируем из контроллеров», но, очевидно, это не так.
Кажется, что страница кэшируется только в памяти, а файлы на диске не используются ... Может кто-нибудь объяснить, что здесь происходит и как я могу кэшировать страницы на диске? Это не практично кэшировать все страницы в памяти. Спасибо!