I'm trying to deploy a refinerycms app into Heroku. the deployment process goes smoothly but assets are not loading properly in front-end and back-end (see image attached).
1 - I have compiled my assets.
2 - I set config.assets.initialize_on_precompile = false
3 - Commited my changes.
and still have the same issue.
What am I missing?
Try adding any refinerycms assets you are missing to config.assets.precompile in production.rb file.
i.e.
config.assets.precompile += ['refinery/refinery.css']
Related
I am facing asset loading issue in Rails 5 application deployed on Heroku.
App Configuration is,
ruby => ‘2.3.1’
rails => '~> 5.0.1'
When image is stored on path,
app/assets/home/image1.jpg
I am accessing it in view as,
= image_tag('/assets/home/image1.jpg’)
which is working properly in Development ENV, but not in Production ENV.
As per Heroku log,
ActionController::RoutingError (No route matches [GET]
"/assets/home/image1.jpg")
If I am moving image directly to
app/assets/image1.jpg
then its working on Production ENV.
Please guide about it.
Thanks
It looks like you assets are not compile on heroku.
Follow below code:
config/environments/production.rb
config.assets.compile = true
then run commands:
RAILS_ENV=production rake assets:precompile
then push all compiled files with menifest file to heroku.
When i run the command rake assets:precomplie for production evn. then assets is updating on locally but did not update on cloudfront cdn files like (http:///assets/pages/!-cc5be2564b7a1c153e5f74c677795613.js). old assets is serving but not new updated assets serving. can you please provide any help to me that how can we update cdn assets.
Did you set the config.action_controller.asset_host directive to your CDN url?
Make sure the RAILS_ENV environment variable is properly set to production. You can also prepend it to the full command: RAILS_ENV=production bundle exec rake assets:precompile.
Within config/environments/production.rb you will see a setting asset_host that is responsible for prepending a domain onto all asset links created via the built in asset helpers
# config/environments/production.rb
config.action_controller.asset_host = "<YOUR DISTRIBUTION SUBDOMAIN>.cloudfront.net"
Once deployed, this application will now serve all assets through the CloudFront distribution.
For more details : https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn
One more thing:
If you want to precompile your assets in production mode then check in production.rb:
config.serve_static_assets = true
config.assets.digest = true
config.assets.compile = true # make it false if you don't want to let heroku precompile everytime
And then Run this below in your terminal:
RAILS_ENV=production bundle exec rake assets:precompile
then deploy I hope this helps you :)
Recently upgraded to Rails 4.0.2 from 3.2 on Heroku. I'm noticing that maybe every other push my stylesheet_link_tag and javascript_include_tag tags point to my development path (i.e. /assets/admin.css) instead of my production/precompiled # fingerprinted path such as /assets/admin-a334a2cf57ed6ffc29f7f7a1af35f380.css
here are the relevant setting from production.rb:
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
Because I am on Heroku I have config.assets.initialize_on_precompile = false in application.rb. So I always run bundle exec rake assets:precompile before deploying if I have made any changes to asset files.
Here is my folder hierarchy:
app
-assets
-images
-javascripts
-stylesheets
-themes
dark.css
blue.css
etc...
admin.css
application.css
jobboard.css
here is my application.config
config.assets.precompile += [
'admin.css',
'admin.js',
'jobboard.js',
'jobboard.css',
'themes/dark.css',
'themes/blue.css',
'themes/green.css',
'themes/plain.css',
'themes/seafoam-flat.css',
'themes/fire-flat.css'
]
But for some reason I get this inconsistent behavior in production. All files precompile. But sometimes the admin.css file is not referenced w/ the fingerprint, same for the css files under /themes. Any clue as to why this might happen?
If there's a missing precompile file maybe you should add them in config/application.rb
config.assets.precompile += %w( admin.css )
and then
RAILS_ENV=production bundle exec rake assets:precompile
You can check in the manifest ( public/assets ) for missing file or to see the fingerprint.
I use leaflet to show a map with some markers in my Rails 4 application.
In development environement, everything is ok. But when I deploy on heroku, the map is displayed but not the markers.
When I checked the errors in the browser, I've noticed the following:
Error: Couldn't autodetect L.Icon.Default.imagePath, set it manually.
What I understand is that the framework could not locate the icon image. So I downloaded the last version of leaflet from their site and moved files to vendor/assets/javascripts/leaflet and vendor/assets/stylesheets/leaflet and vendor/assets/images/leaflet.
I have config.assets.initialize_on_precompile = false in my configuration file:
# config/application.rb
config.assets.initialize_on_precompile = false
I run:
$> rake assets:precompile RAILS_ENV=staging
Then I deploy to my staging environment hosted by heroku.
Do you have any idea? Thank you,
You can also just set it manually:
L.Icon.Default.imagePath = 'path-to-your-leaflet-images-folder';
Updating leaflet from 0.6.2 to 0.6.4 solved the problem.
# Gemfile
...
gem 'leaflet-rails', '>=0.6.4'
...
Working on rails, images are not visible and giving error.
Started GET "/assets/home.png" for 127.0.0.1 at 2012-06-19 12:23:24 +0530
Served asset /home.png - 404 Not Found (24ms)
ActionController::RoutingError (No route matches [GET] "/assets/home.png"):
I have used command
rake assets:precompile
production.rb
config.assets.compress = true
config.assets.compile = false
application.rb
config.assets.enabled = true
config.assets.version = '1.0'
Thanks for any help!
Actually you cannot reference your image with /assets/home.png path.
It will work in development mode, but in production all of your assets have a fingerprint in their filename (read this http://guides.rubyonrails.org/asset_pipeline.html#what-is-fingerprinting-and-why-should-i-care-questionmark)
That's why, in assets-pipeline enabled applications you need to reference all of your assets using helper methods. Read this doc to learn about the different helpers available in Ruby, JS and Sass files: http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets
The lack of a fingerprint in the file request suggests that you are running this in development. I am also going to guess that this is an app upgraded from an older version of Rails.
Any images need to be in the folder /assets/images for the pipeline to work.
Also, you do not need to precompile when in development mode.
Delete the public/assets folder, delete the folder tmp/cache/assets, and restart your server.
If this images are in the correct location, it should work.