Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

asset_path in scss file rails

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.

like image 867
Toby Joiner Avatar asked Nov 30 '11 23:11

Toby Joiner


People also ask

How do you Precompile in Rails?

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.

How do I import a SCSS file into Rails?

You can just add the import to the application. scss file so it will look like: @import "bootstrap/bootstrap.

What does rake assets Clean do?

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.

What is Require_tree?

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.

How do I configure Sass via rails?

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.

Where do I put my assets in rails?

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.

What files does rails generate when generating a scaffold?

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.

How do remote clients know when to refetch assets in rails?

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 .


1 Answers

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

like image 59
asgeo1 Avatar answered Sep 27 '22 22:09

asgeo1