Помогите реализовать кэширование страниц в приложении Rails 3, обслуживаемом из подкаталога через Passenger / Apache - PullRequest
1 голос
/ 16 марта 2011

Я обслуживаю приложение Rails 3 из подкаталога с Passenger и Apache:

<VirtualHost *:80>
  RackBaseURI /streamspons
  <Directory /var/www/html/streamspons>
     AllowOverride all
     Options -MultiViews 
  </Directory>
</VirtualHost>

В моем контроллере я кеширую страницу:

caches_page :banner

Когда вызывается действие #banner, страница записывается в public /, но внутри другого каталога, названного для подкаталога приложения (другими словами, вся строка запроса, включая подкаталог, находится в путь к кешу):

Started GET "/streamspons/decks/2/banner.js"
...
Write page /var/www/public/apps/streamspons/releases/20110316162902/public/streamspons/decks/2/banner.js

Когда это действие запрашивается снова, оно пропускает кэш и снова запускает действие, потому что кэшированная страница должна иметь значение public/decks/2/banner.js вместо public/streamspons/decks/2/banner.js.

Куда я иду не так?

1 Ответ

0 голосов
/ 04 июня 2011

В Rails 3.0.1 я добавил это в свой app / controllers / application_controller.rb:

class ApplicationController < ActionController::Base
  ...

  # override this class method to strip the path to the
  # rails app root from the request path
  def self.page_cache_path(path)
    path.gsub!(%r[^/streamspons], "")
    page_cache_directory + page_cache_file(path)
  end
end

В последних Rails это может выглядеть так:

class ApplicationController < ActionController::Base
  ...

  def self.page_cache_path(path, extension = nil)
    path.gsub!(%r[^/streamspons], "")
    page_cache_directory + page_cache_file(path, extension)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...