Ошибка импорта Sass в приложении Rails 3 - «Файл для импорта не найден или не читается: компас» - PullRequest
24 голосов
/ 15 мая 2011

У меня есть приложение Rails 3, в котором я успешно запустил compass init rails ./ --using blueprint. Я могу @import файлы из каталога / stylesheets, но я получаю сообщение об ошибке при попытке @import compass.

В настоящее время в приложении есть два простых файла sass:

common.scss

$body-background: blue;

main.scss

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

body { 
  background: $body-background; 
}

С закомментированной строкой @import "compass" это работает - у меня синий фон, и я знаю, что Sass работает.

Если я раскомментирую строку и попытаюсь импортировать compass или blueprint или что-нибудь еще, я получу ошибку, подобную этой.

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: }

Мне пришлось, возможно, мне пришлось явно сказать Sass, где найти драгоценный камень Compass, поэтому я добавил строку 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"

Я два дня гуглял и не могу определить, почему у меня эта проблема с базовыми @import утверждениями. Как мне сообщить Sass, где найти библиотеки Compass и Blueprint?

Ответы [ 7 ]

21 голосов
/ 26 января 2012

Я получил эту ошибку.

Я изменил эту строку в моем application.rb с:

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

до:

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

Также убедитесь, что файлы имеют имена что-то.css.sass НЕ что-то.sass

И еще одна вещь, у меня был старый файл compass.rb в моей директории config, который не нужен в Rails 3.2. Удаление, которое также решило эту проблему для меня.

9 голосов
/ 08 мая 2012

Я исправил эту проблему, переключившись на гем compass-rails вместо драгоценного камня compass в моем Gemfile (не забудьте перезагрузить свой сервер).На всякий случай, если кто-то может встретиться здесь.

5 голосов
/ 08 февраля 2013

Я исправил эту ошибку после того, как ударил по ней головой

Я прокомментировал эту строку в моем application.rb от:

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

и без комментариев:

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

Я использую Rails 3.2.11

4 голосов
/ 23 мая 2011

Хорошо, после помощи удивительного Криса Эппштейна я смог найти оскорбительную строку. В config/environments.rb у меня была эта строка:

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

В текущих версиях Rails (у меня 3.0.7) и Compass (0.11.1) эта строка не обязательна . Я добавил его после обучения. Если sass не может найти компас, это может быть из-за того, что эта строка испортила ваш Sass::Plugin.options[:template_location].

3 голосов
/ 31 мая 2012

Я исправил эту проблему на своем сервере Rails 3.2.0, выдвинув gem 'compass-rails', '~> 1.0.1' из группы :assets в Gemfile, из подсказки в https://github.com/Compass/compass-rails/issues/19.

2 голосов
/ 15 мая 2011

Команда @import в Sass импортирует файлы .scss или .sass, а не файлы .css.

Похоже, что-то было пропущено при установке.(возможно, строка compass install blueprint?) Я выполнил следующие шаги: http://compass -style.org / reference / blueprint / и не смог воссоздать проблему.

0 голосов
/ 15 июня 2013

Я исправил эту ошибку следующим образом:

В application.rb у меня было

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

и изменено на

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

Это было после обновления проекта с 3.0.3 до 3.2.13

...