web-dev-qa-db-ja.com

Rails 3アプリでのSassインポートエラー-「インポートするファイルが見つからないか、読み取れません:コンパス」

Rails 3アプリでcompass init Rails ./ --using blueprintを正常に実行できました。/stylesheetsディレクトリから@importファイルを取得できますが、@import compassを実行しようとするとエラーが発生します。

現在、このアプリには2つのシンプルな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 gemの場所を明示的に指示する必要があったため、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"

私は2日間グーグルで作業しており、基本的な@importステートメントでこの問題が発生している理由を特定できません。 SassにCompassライブラリとBlueprintライブラリの場所を教えてください。

24
Eric Wright

さて、素晴らしいクリス・エップスタインの助けを借りて、問題のある行を見つけることができました。 config/environments.rbこの行がありました:

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

Rails(私は3.0.7を持っています)とコンパス(0.11.1を持っています)の現在のバージョンでは、この行は必要ありませんです。チュートリアルに従って追加しました。 sassがコンパスを見つけられない場合は、この行がSass::Plugin.options[:template_location]

4
Eric Wright

このエラーが発生しました。

私のapplication.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

そしてもう1つのことは、Rails 3.2では不要なconfigディレクトリに古いcompass.rbファイルがあったことです。これを削除すると、この問題も解決されました。

21

compass-Rails gemの代わりにcompass gemをGemfileに入れます(サーバーを再起動することを忘れないでください)。誰かがここで遭遇するかもしれないので念のために。

9
Jasper Kennis

私は頭をぶつけた後にこのエラーを修正しました

私は私の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を使用しています

5
Abhra Basak

私はこの問題を自分のRails 3.2.0サーバーで移動して修正しましたgem 'compass-Rails', '~> 1.0.1' から :assetsGemfile内のグループ https://github.com/Compass/compass-Rails/issues/19 のヒントから。

3
ecmanaut

Sassの@importコマンドは、.cssファイルではなく.scssまたは.sassファイルをインポートします。

インストールで何かが欠けているようです。 (たぶんcompass install blueprint?)私は次の手順に従いました: http://compass-style.org/reference/blueprint/ で、問題を再現できませんでした。

2
MattMcKnight

このエラーを次のように修正しました:

私が持っていた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に更新した後です。

0