Pregunta

Estoy en 3.2.1, con sass-rails-3.2.4 y sass-3.1.15 ...

La documentación para la tubería de activos dice:

asset-url("rails.png", image) becomes url(/assets/rails.png)
image-url("rails.png") becomes url(/assets/rails.png)

...

Entonces hice el siguiente archivo:

# app/assets/stylesheets/public/omg.css.sass

body
  background: asset-url('snake.gif', image)

#lol
  background: image-url('snake.gif')

y cuando visito localhost: 3000/activos/público/omg.css obtengo:

body {
  background: asset-url("snake.gif", image); }

#lol {
  background: image-url("snake.gif"); }

... También intenté cambiar el archivo a OMG.css.scss y cambié la sintaxis a:

# app/assets/stylesheets/public/omg.css.scss

body {
  background: asset-url('snake.gif', image);
}

#lol {
  background: image-url('snake.gif');
}

Pero obtenga los mismos resultados ... ¿Alguien tiene alguna idea de por qué estos ayudantes no están funcionando?

¿Fue útil?

Solución

A pesar de lo que dice la documentación, parece que las opciones predeterminadas en Rails 3.2.6 le permiten hacer que las cosas funcionen con menos información de ruta en su CSS. P.ej ../app/assets/images/rails.png es referencias en su archivo de ejemplo.css.scss con algo como:

background: white url(rails.png) repeat-y;

No incluyes el image-url o asset-url en tu SCSS (que yo sepa), simplemente url(your_image.png). Esa parte de la documentación parece ser solo una explicación de lo que está haciendo en segundo plano.

Otros consejos

Cuando presioné este problema, fue porque no había incluido el archivo CSS en la tubería de activos para la preocompilación. Como resultado, se generaría en tiempo de ejecución. Debido a que la gema Sass-Rails está comúnmente en el grupo: Activos, los ayudantes no están disponibles al generar archivos CSS en tiempo de ejecución.

Intente agregar la siguiente línea a su aplicación.rb (o producción.RB):

config.assets.precompile += %w( public/omg.css )

Encontré la solución esta publicación incluyendo un gotcha en torno a nombrar los archivos al agregarlos al precompilador.

Si ha actualizado su aplicación a Rails 3.1 en el pasado, asegúrese de cambiar su archivo de aplicación.rb desde

# If you have a Gemfile, require the gems listed there, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env) if defined?(Bundler)

a

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require *Rails.groups(:assets => %w(development test))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

Ver este ferrocarril Al actualizar a Rails 3.1 y agregar la tubería de activos.

Actualizar: Rails 4 se remonta a la antigua forma de hacerlo. Gracias Aaron Gray!

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)

¿Ha habilitado la tubería de activos en application.rb?

config.assets.enabled = true

Lo hiciste correctamente estableciendo la extensión en tus hojas de estilo sass a .css.scss. Eso le permite a Rails saber para analizar el archivo con Sass primero antes de emitir el contenido como CSS.

Es posible que desee intentar Clearing /TMP /Cache. Soy demasiado nuevo para Rails y Sass para saber por qué funcionó, pero me resolvió el mismo problema después de horas de búsqueda.

Por cierto, esto funcionó a pesar del hecho de que podía ver otras directivas SASS, como establecer variables y calcular con ellas, ser ejecutadas. Estoy seguro de que hay una explicación muy simple, una vez que tengo tiempo para rastrearlo.

Hice el cambio sugerido por @ryan, así como actualizar los riel sass:

bundle update sass-rails

Sass 3.2.6 funcionó para mí, mientras que 3.2.5 no.

Simplemente tuvimos el mismo problema y lo solucionamos explícitamente requiriendo ruedas dentadas en Gemfile (aunque es una dependencia de ActionPack):

group :assets do
  gem 'sprockets'
  gem 'sass-rails', '~> 3.2.3'
  # ...
end

No sé por qué, pero ahora funciona. ;-)

He estado golpeando mi cabeza contra esto durante días. La única solución que funcionó para mí fue la siguiente:

  1. Asegúrese de que SassRes a su: grupo de desarrollo en su archivo gem.
  2. Si eso no lo soluciona, agregue lo siguiente a un nuevo archivo en config/ inicializadores/ llamado algo así como "horrible_sass_patch.rb":

    begin
      require 'sass-rails'
    rescue
    end
    
    if Class.const_defined? "Sass::Script::Functions"
      module Sass::Script::Functions
        # This function exists, but doesn't automatically register
        declare :asset_url, [:value]
        declare :image_url, [:value]
        declare :font_url, [:value]
        # ... etc
      end
    end
    

Nota: Esto requiere que esté utilizando el mecanismo de carga del Bundler "Active", es decir, su aplicación. RB usa lo siguiente:

Bundler.require *Rails.groups(:assets => %w(development test))

... y si sus hojas de estilo están en proveedor, asegúrese de que se incluyan en la configuración de Sass:

if config.respond_to? :sass
  config.sass.load_paths << Rails.root.join('vendor', 'assets', 'stylesheets')
end

Puedes agregar un corte de arrastre de avance / al camino y usar url Como suele hacerlo.

background-image: url("/assets/rails.png")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top