49 votes

sass-rails aides "image url", "asset-url" ne travaillent pas dans les rails 3.2.1

Je suis sur 3.2.1, avec sass-rails-3.2.4 et sass-3.1.15...

La documentation pour l'asset pipeline dit:

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

...

J'ai donc fait le fichier suivant:

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

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

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

et lorsque je visite localhost:3000/assets/public/omg.css-je obtenir:

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

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

... J'ai aussi essayé de changer le fichier omg.css.scss et changé la syntaxe:

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

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

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

mais obtenir les mêmes résultats... quelqu'un a une idée de pourquoi ces aides ne sont pas de travail?

37voto

Jay H. Points 486

En dépit de ce que dit la documentation, il semble que les options par défaut dans les rails 3.2.6 vous permettre de simplement faire fonctionner les choses, avec encore moins d'informations de chemin d'accès dans votre CSS. E. g. ../app/assets/images/rails.png est références dans votre exemple.css.scss fichier avec quelque chose comme:

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

Vous n'incluez pas l' image-url ou asset-url dans votre scss (autant que je sache), il suffit de plain url(your_image.png). Le peu de documentation semble être juste une explication de ce qu'il fait en arrière-plan.

11voto

Forrest Points 499

Quand j'ai frappé ce problème, c'était parce que je n'avait pas inclus le fichier css dans l'asset pipeline pour la pré-compilation. En conséquence, il pourrait être générée lors de l'exécution. Parce que le sass-gem rails est souvent dans l' :les actifs du groupe, les aidants sont pas disponibles lors de la génération des fichiers css lors de l'exécution.

Essayez d'ajouter la ligne suivante à votre application.rb (ou de la production.rb):

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

J'ai trouvé la solution sur ce post, y compris un piège autour de nommer les fichiers en les ajoutant à la précompilateur.

6voto

Ryan Points 4221

Si vous avez mis à jour votre application Rails 3.1, dans le passé, assurez-vous que vous avez changé votre application.rb fichier à partir de

# 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)

pour

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

Voir ce railscast sur la mise à niveau des Rails 3.1, et l'ajout de l'asset pipeline.

Mise à jour: Rails 4 remonte à l'ancienne façon de faire. Merci Aaron Gray!

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

4voto

Brandan Points 8311

Avez-vous activé l'asset pipeline en application.rb?

config.assets.enabled = true

Vous n'avez droit en définissant l'extension sur votre Sass les feuilles de style pour .css.scss. Qui vous permet de Rails pour savoir à analyser le fichier avec Sass d'abord avant qu'il émet le contenu CSS.

1voto

kburke Points 248

Vous voudrez peut-être essayer de compensation /tmp/cache. Je suis trop nouveau sur les Rails et Sass savoir pourquoi cela a fonctionné, mais il a résolu le même problème pour moi, après des heures de recherche.

BTW, cela a fonctionné malgré le fait que j'ai pu voir d'autres Sass directives, telles que la définition des variables et calcul avec eux, en cours d'exécution. Je suis sûr qu'il y est une explication très simple, une fois que j'ai le temps pour le retrouver.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X