Подтвердить что ты не робот

Ошибка импорта Sass в приложении Rails 3 - "Файл для импорта не найден или нечитабельный: компас"

У меня есть приложение 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" прокомментирована, это работает - я получаю синий фон, поэтому я знаю, что Сасс работает.

Если я раскомментирую строку и попытаюсь импортировать 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: }

У меня было, может быть, мне пришлось явно сказать Сасс, где найти жемчужину 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?

4b9b3361

Ответ 1

Хорошо, после помощи удивительного Криса Эппштейна я смог найти оскорбительную линию. В 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].

Ответ 2

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

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

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

в

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

Кроме того, убедитесь, что файлы являются именами something.css.sass НЕ something.sass

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

Ответ 3

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

Ответ 4

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

Я прокомментировал эту строку в своем приложении .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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

В 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