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).