Я занимаюсь разработкой веб-приложения, которое взаимодействует с API.Чтобы повысить производительность, я пытаюсь реализовать HTTP-кэширование с помощью Фарадея.
Сначала я попробовал стандарт :memory_cache
:
@conn = Faraday.new(url: URL) do |builder|
builder.use :http_cache, store: Rails.cache, logger: ActiveSupport::Logger.new(STDOUT)
builder.adapter Faraday.default_adapter
end
development.rb:
...
if Rails.root.join('tmp/caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}"
}
else
config.action_controller.perform_caching = false
config.cache_store = :null_store
end
...
tmp/caching-dev.txt
, поэтому кэширование включено.
Но для каждого запроса API я получал следующее:
HTTP Cache: [GET /parks] miss, uncacheable
И нет никаких объяснений вообщеотносительно того, что делает ответ не кэшируемым.По крайней мере, я не смог его найти.
Затем я попытался переключиться на пользовательский кэш памяти:
class CustomCacheStore
attr_accessor :store_hash
def initialize
@store_hash = Hash.new
end
def write(key, value)
end
def read(key)
end
def fetch(key)
raise 'No block provided' unless block_given?
result = read(key)
if result.nil?
result = yield
write(key, result)
end
result
end
end
Конфигурация Фарадея:
custom_store = CustomCacheStore.new
@conn = Faraday.new(url: URL) do |builder|
builder.use FaradayMiddleware::Caching, store: custom_store, logger: ActiveSupport::Logger.new(STDOUT)
builder.adapter Faraday.default_adapter
end
И все жето же самое:
HTTP Cache: [GET /parks] miss, uncacheable
API также написан на RoR и работает на сервере nginx со следующей конфигурацией:
upstream puma { server unix:///{...}; }
server { listen 8000 default_server deferred;
root {...}
access_log {...}
error_log {...}
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public; }
try_files $uri/index.html $uri @puma; location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma; }
error_page 500 502 503 504 /500.html;
client_max_body_size 1500M;
keepalive_timeout 10;
}
Rails 5.1.6