cache full pages for logged-out visitors without tag filters
This commit is contained in:
parent
a59cf79956
commit
f278565e09
18
Gemfile
18
Gemfile
|
@ -1,34 +1,38 @@
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
gem "json"
|
|
||||||
gem "rails", "~> 5.1"
|
gem "rails", "~> 5.1"
|
||||||
|
|
||||||
gem "unicorn"
|
|
||||||
|
|
||||||
gem "mysql2", "~> 0.3.20"
|
gem "mysql2", "~> 0.3.20"
|
||||||
|
|
||||||
# uncomment to use PostgreSQL
|
# uncomment to use PostgreSQL
|
||||||
# gem "pg"
|
# gem "pg"
|
||||||
|
|
||||||
|
# rails
|
||||||
gem 'scenic'
|
gem 'scenic'
|
||||||
gem 'scenic-mysql'
|
gem 'scenic-mysql'
|
||||||
|
gem "activerecord-typedstore"
|
||||||
|
|
||||||
gem "uglifier", ">= 1.3.0"
|
# js
|
||||||
gem "jquery-rails", "~> 4.3"
|
|
||||||
gem "dynamic_form"
|
gem "dynamic_form"
|
||||||
|
gem "jquery-rails", "~> 4.3"
|
||||||
|
gem "json"
|
||||||
|
gem "uglifier", ">= 1.3.0"
|
||||||
|
|
||||||
|
# deployment
|
||||||
|
gem "actionpack-page_caching"
|
||||||
gem "exception_notification"
|
gem "exception_notification"
|
||||||
|
gem "unicorn"
|
||||||
|
|
||||||
|
# security
|
||||||
gem "bcrypt", "~> 3.1.2"
|
gem "bcrypt", "~> 3.1.2"
|
||||||
gem "rotp"
|
gem "rotp"
|
||||||
gem "rqrcode"
|
gem "rqrcode"
|
||||||
|
|
||||||
|
# parsing
|
||||||
gem "nokogiri", ">= 1.7.2"
|
gem "nokogiri", ">= 1.7.2"
|
||||||
gem "htmlentities"
|
gem "htmlentities"
|
||||||
gem "commonmarker", "~> 0.14"
|
gem "commonmarker", "~> 0.14"
|
||||||
|
|
||||||
gem "activerecord-typedstore"
|
|
||||||
|
|
||||||
# for twitter-posting bot
|
# for twitter-posting bot
|
||||||
gem "oauth"
|
gem "oauth"
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@ GEM
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
|
actionpack-page_caching (1.1.0)
|
||||||
|
actionpack (>= 4.0.0, < 6)
|
||||||
actionview (5.1.5)
|
actionview (5.1.5)
|
||||||
activesupport (= 5.1.5)
|
activesupport (= 5.1.5)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
|
@ -194,6 +196,7 @@ PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
|
actionpack-page_caching
|
||||||
activerecord-typedstore
|
activerecord-typedstore
|
||||||
bcrypt (~> 3.1.2)
|
bcrypt (~> 3.1.2)
|
||||||
bullet
|
bullet
|
||||||
|
|
|
@ -5,8 +5,11 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
TRAFFIC_DECREMENTER = 0.50
|
TRAFFIC_DECREMENTER = 0.50
|
||||||
|
|
||||||
|
# match this in your nginx config for bypassing the file cache
|
||||||
TAG_FILTER_COOKIE = :tag_filters
|
TAG_FILTER_COOKIE = :tag_filters
|
||||||
|
|
||||||
|
CACHE_PAGE = proc { @user.blank? && cookies[TAG_FILTER_COOKIE].blank? }
|
||||||
|
|
||||||
def authenticate_user
|
def authenticate_user
|
||||||
# eagerly evaluate, in case this triggers an IpSpoofAttackError
|
# eagerly evaluate, in case this triggers an IpSpoofAttackError
|
||||||
request.remote_ip
|
request.remote_ip
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
class CommentsController < ApplicationController
|
class CommentsController < ApplicationController
|
||||||
COMMENTS_PER_PAGE = 20
|
COMMENTS_PER_PAGE = 20
|
||||||
|
|
||||||
|
caches_page :index, :threads, if: CACHE_PAGE
|
||||||
|
|
||||||
# for rss feeds, load the user's tag filters if a token is passed
|
# for rss feeds, load the user's tag filters if a token is passed
|
||||||
before_action :find_user_from_rss_token, :only => [:index]
|
before_action :find_user_from_rss_token, :only => [:index]
|
||||||
before_action :require_logged_in_user_or_400,
|
before_action :require_logged_in_user_or_400,
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
class HomeController < ApplicationController
|
class HomeController < ApplicationController
|
||||||
|
caches_page :about, :chat, :index, :newest, :newest_by_user, :recent, :top, if: CACHE_PAGE
|
||||||
|
|
||||||
# for rss feeds, load the user's tag filters if a token is passed
|
# for rss feeds, load the user's tag filters if a token is passed
|
||||||
before_action :find_user_from_rss_token, :only => [:index, :newest, :saved]
|
before_action :find_user_from_rss_token, :only => [:index, :newest, :saved]
|
||||||
before_action { @page = page }
|
before_action { @page = page }
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
class StoriesController < ApplicationController
|
class StoriesController < ApplicationController
|
||||||
|
caches_page :show, if: CACHE_PAGE
|
||||||
|
|
||||||
before_action :require_logged_in_user_or_400,
|
before_action :require_logged_in_user_or_400,
|
||||||
:only => [:upvote, :downvote, :unvote, :hide, :unhide, :preview, :save, :unsave]
|
:only => [:upvote, :downvote, :unvote, :hide, :unhide, :preview, :save, :unsave]
|
||||||
before_action :require_logged_in_user,
|
before_action :require_logged_in_user,
|
||||||
|
|
|
@ -75,6 +75,8 @@ Lobsters::Application.configure do
|
||||||
|
|
||||||
# Do not dump schema after migrations.
|
# Do not dump schema after migrations.
|
||||||
config.active_record.dump_schema_after_migration = false
|
config.active_record.dump_schema_after_migration = false
|
||||||
|
|
||||||
|
config.action_controller.page_cache_directory = "#{Rails.root}/public/cache"
|
||||||
end
|
end
|
||||||
|
|
||||||
%w{render_template render_partial render_collection}.each do |event|
|
%w{render_template render_partial render_collection}.each do |event|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Be sure to restart your server when you modify this file.
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# match this in your nginx config for bypassing the file cache
|
||||||
Lobsters::Application.config.session_store :cookie_store,
|
Lobsters::Application.config.session_store :cookie_store,
|
||||||
key: 'lobster_trap',
|
key: 'lobster_trap',
|
||||||
expire_after: 1.month
|
expire_after: 1.month
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
find /srv/lobste.rs/http/public/cache/ -type f -not -mmin 2 -not -name ".gitkeep" -delete
|
||||||
|
find /srv/lobste.rs/http/public/cache/ -type d -empty -delete
|
Loading…
Reference in New Issue