Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to turn off Rails caching during development

I'm on Rails 5.2.2 and I'm building a web app that uses some static HTML, CSS, and JavaScript that I'm serving from inside of the public directory. Much of the time when I update a file it doesn't update in my browser when I refresh, but if I go into private browsing it works -- until it caches again and then I need to open a new private window.

How can I turn off caching for file in the public folder? Or if it's easier, how can I turn off all caching during development?

This is what my development.rb looks like. I tried commenting out the entire if Rails.root.join('tmp', 'caching-dev.txt').exist? block but that didn't do anything.

I'm also open to installing a gem to solve this if it can't be fixed with a setting.

Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports.
  config.consider_all_requests_local = true

  config.file_watcher = ActiveSupport::FileUpdateChecker

  # Enable/disable caching. By default caching is disabled.
  # Run rails dev:cache to toggle caching.
  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.to_i}"
    }
  else
    config.action_controller.perform_caching = false

    config.cache_store = :null_store
  end

  # Store uploaded files on the local file system (see config/storage.yml for options)
  config.active_storage.service = :local

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  config.action_mailer.perform_caching = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Highlight code that triggered database queries in logs.
  config.active_record.verbose_query_logs = true

  # Add devide default mailer url
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }


  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true

  # Use an evented file watcher to asynchronously detect changes in source code,
  # routes, locales, etc. This feature depends on the listen gem.
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
end
like image 267
ceckenrode Avatar asked Mar 11 '19 16:03

ceckenrode


People also ask

What does Rails cache clear do?

cache. clear will clear your app cache. In that case rake tmp:cache:clear will just try to remove files from "#{Rails.

Where does Rails store cache?

Rails (as of 2.1) provides different stores for the cached data created by action and fragment caches. Page caches are always stored on disk. Rails 2.1 and above provide ActiveSupport::Cache::Store which can be used to cache strings.

Does Rails cache use Redis?

Rails 5.2 introduced built-in Redis cache store, which allows you to store cache entries in Redis.

What is view caching in Rails?

This guide is an introduction to speeding up your Rails application with caching. Caching means to store content generated during the request-response cycle and to reuse it when responding to similar requests. Caching is often the most effective way to boost an application's performance.


1 Answers

It's not rails who caches, it's your browser.

Either you explicitly set

config.public_file_server.headers = {
  'Cache-Control' => "no-cache"
}

(and clean your browser cache, who has all old and valid versions of your files), or you disable browser cache completely.

like image 188
rewritten Avatar answered Sep 28 '22 10:09

rewritten