Rails 3.1 has changed the way it handles the asset pipeline and it is causing issues when deploying to production.
I am using Apache and Passenger, which seem to work fine.
My production is setup like this (for now).
# congif/environments/production.rb
config.cache_classes = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = true
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
I run rake assets:precompile on Ubuntu and start server. And... nothing. None of my images load.
The legendary 'I can't find an image at this URL' box.
I run rake assets:precompile on CentOS and start server. And... permission errors.
*Error Compiling CSS Asset*
Errno::EACCESS: Permission Denied - [app path]/tmp/cache/assets/E95
[path to RVM Ruby]/fileutils.rb:243:in 'mkdir'
I can't get it to budge. Any help is greatly appreciated. Thank you!
This solution has worked every time for me:
First Clean out your Assets
rm -rf public/assets
and
rake assets:clean RAILS_ENV=production
Second, in #production.rb change
config.assets.compile = false
to
config.assets.compile = true
Third, run to precompile your assets
rake assets:precompile RAILS_ENV=production
Fourth, in #production.rb change
config.assets.compile = true
back to
config.assets.compile = false
Fifth, restart your server by running:
touch tmp/restart.txt
Sixth, un-restrict permissions on your newly created assets by running this command
chmod -R 777 public/assets
Seventh, celebrate!!
That's a simple permission problem. Give the server/daemon the right to create files in [app_path]/tmp recursively.
Assuming your server process runs with the www-data
user you do this with:
cd APP_PATH
chmod -R u+w tmp
and if the directory does not belong to the user you have to change the ownership:
chown -R www-data tmp