# Resetting the template or class cache in Rails 2.2.0

**URL:** <https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221>\
**Category:** Rails\
**Created:** [October 31, 2008, 1:37pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221 "2008-10-31T13:37:56Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 1:37pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/1 "2008-10-31T13:37:56Z")

</div>

While testing the Rails 2.2.0 release I soon knew I had a problem: I’m  
relying on the fact that an ERB template is recompiled if the  
modification time of the file has been updated.

I work on a multisite Rails app, which uses ‘request.host’ to do a  
Site.find\_by\_domain and uses a before filter to call  
‘prepend\_view\_path(“#{RAILS\_ROOT}/themes/#{@site.domain}/templates”).  
It’s also possible to upload a new theme for a specific site via an  
admin backend.  
It’s comparable to Shopify, but instead of using Liquid it relies on  
Rails’ templating mechanism.

The line of code that made this work is located here:  
[http://github.com/rails/rails/tree/v2.1.2/actionpack/lib/action\_view/template\_handlers/compilable.rb#L70](http://github.com/rails/rails/tree/v2.1.2/actionpack/lib/action_view/template_handlers/compilable.rb#L70),  
but in rails-2.2.0 thing have been rewritten and the check is  
unfortunately gone:  
[http://github.com/rails/rails/tree/v2.2.0/actionpack/lib/action\_view/renderable.rb#L90](http://github.com/rails/rails/tree/v2.2.0/actionpack/lib/action_view/renderable.rb#L90).

Currently this means that I need to run this app in production with  
‘config.cache\_classes = false’ in order to upgrade to Rails 2.2.0,  
which reloads all application code on every requests. That’s going to  
be slow. Another solution is restarting the whole app after changing  
the theme for a single site.

Is there a way for me to reset the template cache manually after a  
theme has been updated?

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 2:02pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/2 "2008-10-31T14:02:00Z")

</div>

On 31 Oct 2008, at 12:36, Matthijs L. wrote:

> It’s comparable to Shopify, but instead of using Liquid it relies on  
> ‘config.cache\_classes = false’ in order to upgrade to Rails 2.2.0,  
> which reloads all application code on every requests. That’s going to  
> be slow. Another solution is restarting the whole app after changing  
> the theme for a single site.
> 
> Is there a way for me to reset the template cache manually after a  
> theme has been updated?  
> You could just override that recompile? method

Fred

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 2:07pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/3 "2008-10-31T14:07:16Z")

</div>

Fred,

I think I could write a patch that will take the file modification  
date into consideration, but I’m also eager to know, why the check has  
actually been removed.

- Matthijs

On Oct 31, 2:01 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 5:36pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/4 "2008-10-31T17:36:51Z")

</div>

I don’t understand. If checking if a template has already been  
compiled is thread-safe, checking the modification date should also be  
thread-safe.

If thread safety is the issue here, would there be an option for me to  
reset all compiled templates at once?

On Oct 31, 2:08 pm, “Maurício Linhares” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 5:40pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/5 "2008-10-31T17:40:22Z")

</div>

Maybe you could remove the whole compliled templates folder.

- 

Maurício Linhares  
[http://alinhavado.wordpress.com/](http://alinhavado.wordpress.com/) (pt-br) | [http://blog.codevader.com/](http://blog.codevader.com/)  
(en)  
João Pessoa, PB, +55 83 8867-7208

On Fri, Oct 31, 2008 at 1:35 PM, Matthijs L.

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 2:09pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/6 "2008-10-31T14:09:40Z")

</div>

My bet is that it isn’t thread-safe. Two actions may check at the same  
time, both will get a “true” and both will try to update the cache.

- 

Maurício Linhares  
[http://alinhavado.wordpress.com/](http://alinhavado.wordpress.com/) (pt-br) | [http://blog.codevader.com/](http://blog.codevader.com/)  
(en)  
João Pessoa, PB, +55 83 8867-7208

On Fri, Oct 31, 2008 at 10:06 AM, Matthijs L.

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [February 7, 2009, 6:36pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/7 "2009-02-07T18:36:29Z")

</div>

Hi guys,

I’m trying to get themes working in my app. I’m using the  
prepend\_view\_path in a before filter. Everything seems to work great…  
however, it won’t render layouts from the theme location… it only  
renders the rest of the view files from the theme location and the  
layouts are from the default /app/views location…

Any ideas on how to solve this?

I’m using the Rails 2.3RC1…

---

<div class="post-metadata">

**Author:** ![mlangenberg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a87d85/32.png) [@mlangenberg](https://www.ruby-forum.com/u/mlangenberg)\
**Post date:** [October 31, 2008, 6:41pm UTC](https://www.ruby-forum.com/t/resetting-the-template-or-class-cache-in-rails-2-2-0/152221/8 "2008-10-31T18:41:27Z")

</div>

After doing some git-bisect magic it seems I’m in some real trouble.  
Josh P. intentionally disabled[1] the file modification time check.

@Mauricio, are you sure compiled templates are stored on disk?

[1]

> <https://github.com/rails/rails/commit/ce5d958f8fe878465c0d2142991a2945ca8d3cd1>

On Oct 31, 5:39 pm, “Maurício Linhares” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
