problem with asset timestamps

Hello,

(Config: Rails 2.3.2, Ruby 1.8.7, apache 2.2, assets are served from a
dedicated host specified in ActionController::Base.asset_host, in the
filesystem they are stored in a different folder than the RAILS_ROOT/
public folder.)

I face a problem with asset timestamps being changed for all my assets
when just one asset file has changed. Consequently it bursts the cache
of client browsers for all my assets, whereas I would like that only
the timestamp of the changed asset file be changed, so that others
assets are not bursted in the browser caches.

The scenario:
- I change one asset file on my dev machine.
- I deploy the new version of my app to my production server.
- A script automatically updates the assets which have changed, ie in
my assets folder only the asset file I changed initially has a changed
modification time.
- But when I reload a page of my app, I see in the page source code
that the timestamps automatically added by Rails to the asset files
are updated for all assets, not just for the changed asset

Is it the Rails expected behaviour? If so, is there a workaround to
have Rails change only the timestamp of the effectively changed asset
files? If there is no workaround, is there any other strategy to force
bursting cache of changed assets, whereas preserving the clients cache
of unchanged assets?

Thanks by advance for your help :slight_smile:

Regards,
Florent

Florent2 a écrit :

Hello,

(Config: Rails 2.3.2, Ruby 1.8.7, apache 2.2, assets are served from a
dedicated host specified in ActionController::Base.asset_host, in the
filesystem they are stored in a different folder than the RAILS_ROOT/
public folder.)

I face a problem with asset timestamps being changed for all my assets
when just one asset file has changed. Consequently it bursts the cache
of client browsers for all my assets, whereas I would like that only
the timestamp of the changed asset file be changed, so that others
assets are not bursted in the browser caches.

The scenario:
- I change one asset file on my dev machine.
- I deploy the new version of my app to my production server.
- A script automatically updates the assets which have changed, ie in
my assets folder only the asset file I changed initially has a changed
modification time.
- But when I reload a page of my app, I see in the page source code
that the timestamps automatically added by Rails to the asset files
are updated for all assets, not just for the changed asset

Is it the Rails expected behaviour? If so, is there a workaround to
have Rails change only the timestamp of the effectively changed asset
files? If there is no workaround, is there any other strategy to force
bursting cache of changed assets, whereas preserving the clients cache
of unchanged assets?

Thanks by advance for your help :slight_smile:

Regards,
Florent

OK, I've figured out the cause of my problem. Rails calculates the asset timestamps with the asset files contained in RAILS_ROOT/public. The mtime of those files are all changed when I deploy my application. To have Rails looks in my specific assets folders directory (different than RAILS_ROOT/public), I add a deploy task to symlink the RAILS_ROOT/public to this directory (I could not figure out how to set Rails.public_path in a config file).