We write about Ruby on Rails, React.js, React Native, remote work, open source, engineering and design.
In Rails 4 if I'm doing work related to caching then first I need
to turn caching "on" by opening file
and changing following line.
config.action_controller.perform_caching = false
After changing the value from
true, I need to restart the
This means that if I am testing caching behavior locally then every time I turn caching "on" or "off" I need to restart the server.
$ rails dev:cache Development mode is now being cached.
Execution of the above command creates file
In Rails 5 when a brand new Rails app is created then
config/environments/development.rb file will have the following
snippet of code.
if Rails.root.join('tmp/caching-dev.txt').exist? config.action_controller.perform_caching = true config.static_cache_control = "public, max-age=172800" config.cache_store = :mem_cache_store else config.action_controller.perform_caching = false config.cache_store = :null_store end
In the above code we are checking if the file
is present and then use
:mem_cache_store to enable caching only if the file is found.
Also, here is a snippet from the dev cache source code.
def dev_cache if File.exist? 'tmp/caching-dev.txt' File.delete 'tmp/caching-dev.txt' puts 'Development mode is no longer being cached.' else FileUtils.touch 'tmp/caching-dev.txt' puts 'Development mode is now being cached.' end FileUtils.touch 'tmp/restart.txt' end
The advantage is that we do not need to restart the
server manually if we want to turn caching "on" or "off".
It is internally taken care by the
that is executed when
rails dev:cache is executed.
You can see in the source code that
tmp/restart.txt is being touched.
Please note that this feature is not supported by unicorn, thin and
webrick. My guess is that DHH wants this feature because his team uses
pow and pow restarts when
tmp/restart.txt is touched.
He also created an issue for
spring to watch tmp/restart.txt
Execute the same command that was used to enable caching. If caching was previously enabled then it will be turned "off" now.
$ rails dev:cache Development mode is no longer being cached.