I am having issues with asset_path in production. Rails 3.1.1
#config/environments/development.rb
Scc::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# Show full error reports and disable caching
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
# Do not compress assets
config.assets.compress = false
# Expands the lines which load the assets
config.assets.debug = true
end
and
#config/environments/production.rb
Scc::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# Code is not reloaded between requests
config.cache_classes = true
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress JavaScripts and CSS
config.assets.compress = true
# 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
# Defaults to Rails.root.join("public/assets")
# config.assets.manifest = YOUR_PATH
# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true
# See everything in the log (default is :info)
# config.log_level = :debug
# Use a different logger for distributed setups
# config.logger = SyslogLogger.new
# Use a different cache store in production
# config.cache_store = :mem_cache_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
# config.assets.precompile += %w( search.js )
# Disable delivery errors, bad email addresses will be ignored
# config.action_mailer.raise_delivery_errors = false
# Enable threaded mode
# config.threadsafe!
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
end
I have the following code:
.right-bar-filler{
background:url(asset_path('right_bar_filler.jpg', image)) repeat-y;
padding-top:0px;
}
In development it ends up being:
.right-bar-filler {
background: url("/assets/right_bar_filler.jpg") repeat-y;
padding-top: 0px;
}
In production it outputs as:
.right-bar-filler {
background: url(asset_path("right_bar_filler.jpg", image)) repeat-y;
padding-top: 0px;
}
What am I completely missing?
Thank you for any help.
To compile your assets locally, run the assets:precompile task locally on your app. Make sure to use the production environment so that the production version of your assets are generated. A public/assets directory will be created. Inside this directory you'll find a manifest.
You can just add the import to the application. scss file so it will look like: @import "bootstrap/bootstrap.
The clean it removes the old versions of the precompiled assets while leaving the new assets in place. Show activity on this post. rake assets:clean removes compiled assets. It is run by cap deploy:assets:clean to remove compiled assets, generally from a remote server.
The require_tree directive tells Sprockets to recursively include all JavaScript files in the specified directory into the output. These paths must be specified relative to the manifest file.
To configure Sass via Rails set use config.sass in your application and/or environment files to set configuration properties that will be passed to Sass. preferred_syntax - This option determines the default Sass syntax and file extensions that will be used by Rails generators.
In Rails 3.1, you can place them under apps/assets. Rails treats your javascript code, stylesheets and images as assets and helps you boost the speed in a development environment. The asset pipeline offers you the ability to precompile, concatenate and compress your assets.
Additionally, when generating a scaffold, Rails generates the file scaffolds.css (or scaffolds.scss if sass-rails is in the Gemfile .) For example, if you generate a ProjectsController, Rails will also add a new file at app/assets/stylesheets/projects.scss.
If there are no digests in the filenames, and far-future headers are set, remote clients will never know to refetch the files when their content changes. Rails comes bundled with a command to compile the asset manifests and other files in the pipeline. Compiled assets are written to the location specified in config.assets.prefix .
This doesn't look correct:
.right-bar-filler{
background:url(asset_path('right_bar_filler.jpg', image)) repeat-y;
padding-top:0px;
}
If you want to use the asset_path
helper, it needs to run inside the erb tags (<% %>)
.right-bar-filler{
background:url(<%= asset_path('right_bar_filler.jpg', image) %>) repeat-y;
padding-top:0px;
}
and make sure you name the file correctly, i.e. example_filename.css.erb
UPDATE: Sorry, I didn't notice you were using SASS, not CSS. My above answer is not what you need.
Try this instead:
.right-bar-filler{
background:url(asset-path('right_bar_filler.jpg', image)) repeat-y;
padding-top:0px;
}
I.e. I think the asset path helper uses hyphens in SASS, not underscores
http://rubydoc.info/github/petebrowne/sprockets-sass/master/Sprockets/Sass/Functions
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With