web-dev-qa-db-fra.com

Erreur d'importation Sass dans l'application Rails 3 - "Fichier à importer introuvable ou illisible: boussole"

J'ai une application Rails 3 sur laquelle j'ai réussi à exécuter compass init Rails ./ --using blueprint. Je peux @import les fichiers du répertoire/stylesheets, mais j'obtiens une erreur lorsque j'essaie de @import compass

À l'heure actuelle, l'application a deux fichiers Sass simples:

common.scss

$body-background: blue;

main.scss

@import "common";
//@import "compass";

body { 
  background: $body-background; 
}

Avec la ligne @import "compass" commentée, cela fonctionne - je reçois un fond bleu, donc je sais que Sass fonctionne.

Si je supprime la mise en commentaire de la ligne et tente d'importer compass ou blueprint ou quoi que ce soit d'autre, j'obtiens une erreur de ce type.

Syntax error: File to import not found or unreadable: compass.
              Load paths:

                /Users/eric/path/to/myrailsapp/app/stylesheets
        on line 2 of /Users/eric/path/to/myrailsapp/app/stylesheets/main.scss

1: @import "common";
2: @import "compass";
3: 
4: body { 
5:  background: $body-background; 
6: }

Je devais peut-être préciser explicitement à Sass où trouver la gemme Compass. J'ai donc ajouté une ligne add_import_path à config/compass.rb:

require 'compass'
require 'html5-boilerplate'

project_type = :Rails
project_path = Rails_ROOT if defined?(Rails_ROOT)
add_import_path "/Library/Ruby/Gems/1.8/gems/"  # unfortunately this has no effect

http_path = "/"
css_dir = "public/stylesheets"
sass_dir = "app/stylesheets"
images_dir = "public/images"
javascripts_dir = "public/javascripts"
cache_dir = "tmp/sass-cache"

http_images_path = "/images"
http_stylesheets_path = "/stylesheets"
http_javascripts_path = "/javascripts"

Je suis sur Google depuis deux jours et je ne peux pas déterminer pourquoi je rencontre ce problème avec les instructions de base @import. Comment dire à Sass où trouver les bibliothèques Compass et Blueprint?

24
Eric Wright

D'accord, après l'aide de l'incroyable Chris Eppstein, j'ai pu trouver la ligne en cause. Dans config/environments.rb j'avais cette ligne:

Sass::Plugin.options[:template_location] = {
"#{Rails_ROOT}/app/stylesheets" => "#{Rails_ROOT}/public/stylesheets"
}

Avec les versions actuelles de Rails (3.0.7) et Compass (0.11.1), cette ligne est pas nécessaire . Je l'ai ajouté après avoir suivi un tutoriel. Si sass ne trouve pas la boussole, c'est peut-être parce que cette ligne gâche votre Sass::Plugin.options[:template_location]

4
Eric Wright

Je recevais cette erreur.

J'ai changé cette ligne dans mon application.rb de:

Bundler.require(:default, Rails.env) if defined?(Bundler)

à:

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

Assurez-vous également que les fichiers portent les noms quelque chose.css.sass NOT quelque chose.sass

Et une autre chose, j'avais un ancien fichier compass.rb dans mon répertoire de configuration qui n'est pas nécessaire dans Rails 3.2. Supprimer cela a également résolu ce problème pour moi.

21
Jonathon Horsman

J'ai résolu ce problème en basculant surcompass-Railsgem au lieu decompassgem dans mon Gemfile (n'oubliez pas de redémarrer votre serveur). Juste au cas où quelqu'un pourrait venir ici.

9
Jasper Kennis

J'ai corrigé cette erreur après me cogner la tête

J'ai commenté cette ligne dans mon application.rb de:

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

et non commenté: 

Bundler.require(:default, :assets, Rails.env) if defined?(Bundler)    

J'utilise Rails 3.2.11

5
Abhra Basak

J'ai résolu ce problème sur mon serveur Rails 3.2.0 en déplaçant gem 'compass-Rails', '~> 1.0.1' du groupe :assets dans la Gemfile, d'un conseil dans https://github.com/Compass/compass-Rails/issues/19 .

3
ecmanaut

La commande @import de Sass importe des fichiers .scss ou .sass, et non des fichiers .css.

Il semble que quelque chose ait été oublié lors de l'installation. (Peut-être la ligne compass install blueprint??) J'ai suivi les étapes ici: http://compass-style.org/reference/blueprint/ et n'ai pas pu recréer le problème.

2
MattMcKnight

J'ai corrigé cette erreur comme ceci:

Dans application.rb j'avais

Bundler.require(:default, Rails.env) if defined?(Bundler)  

et changé en

Bundler.require(:default, :assets, Rails.env) if defined?(Bundler)

C'était après la mise à jour d'un projet de 3.0.3 à 3.2.13

0
Thinley Koblensky