1

私は2つのプロジェクトを持っています。1 つはサイトの公開側用で、もう 1 つは管理者用です。両方のページで同じページがあります。

私のディレクトリ構造は次のようなものです:

/public
  config.rb
  /images
    /upgrade
      /sprites
  /sass
    /upgrade
        index.scss
  /stylesheets

/cms
  config.rb
  /sass
    /upgrade
        index.scss
  /stylesheets

public/sass/upgrade/index.scssすべてのスタイルが存在する場所です。cms/sass/upgrade/index.scss次のように、これらのスタイルをインポートします。

@import '../../../public/sass/upgrade'

css を に生成できるという点で、これらは正常に機能しcms/stylesheets/upgrade/index.cssます。問題が発生しているのはスプライトの生成です。内部ではpublic/sass/upgrade/index.scss、スプライト png のインポートは次のようになります。

@import 'upgrade/sprites/*.png';

LiveReload を使用すると、次のエラーが表示されます。

Cannot determine the opposite position of: to
Cannot determine the opposite position of: to
Cannot determine the opposite position of: to
No files were found in the load path matching "setup/packages/*.png". Your current load paths are: ./images

cms/sass/upgrade/index.scssをコンパイルすると、画像がない場所で画像が検索されるため、これは理にかなっcms/images/upgrade/spritesています。

誰かがこの問題に遭遇したことがあり、プロジェクト間でアセットを共有する方法を知っているかどうかを知りたい. relative_assets = trueその設定が役立つと思いましたが、そうではありませんでした。使い方が悪いのかな。知らない。

4

1 に答える 1

2

シンマノンのシンボリックリンクを作成するという提案がうまくいくはずです。あなたはそれを正しくやっていると確信していますか?安全のために、絶対パスを使用してください。

あなたのプロジェクト構造はちょっとおかしくて、私はそれを完全に理解できなかったので、正確なシンボリックリンクの配置とターゲットを与えることはできません. 正確なパスを提供したい場合は、質問を次のように更新してください。

  1. シンボリックリンクを配置する場所、それが指す場所、コンパイルしようとしたときに発生するエラー。
  2. より詳細なプロジェクト構造 (関連するファイルの完全な内容が役立ちます)。

UPD: Apache 構成でFollowSymLinksが有効になっていて、PHP 構成でinclude_pathにすべてのプロジェクト ディレクトリがあることを確認してください。

あきらめたら、私が発明したばかりの厄介なハックを使用できます。:D

アイデアは、呼び出されたプロジェクトに応じて異なる結果を返すカスタム SASS 関数を作成することです。public/sass/upgrade/index.scssこれにより、コンパイルしているプロジェクトに応じて、さまざまなパスをインポートできます。

public/config.rb、次を追加します。

# Assign a name to the project and pass it into SASS
$project_name = "public"
module Sass::Script::Functions
  def project_name
    Sass::Script::String.new($project_name)
  end
end

への追加cms/config.rbは非常に似ています。唯一の違いは $project_name の値です:

# Assign a name to the project and pass it into SASS
$project_name = "cms"
module Sass::Script::Functions
  def project_name
    Sass::Script::String.new($project_name)
  end
end

その後、インポート行を次のように変更しpublic/sass/upgrade/index.scssます。

@if project-name() == public {
  @import 'upgrade/sprites/*.png';
} @else if project-name() == cms {
  @import '../../../public/upgrade/sprites/*.png';
}

私の例のインポート パスは曲がっています。環境に合わせて調整してください。

UPD2:@importような制御ディレクティブ内でディレクティブを使用することはできません@if。したがって、代わりに次を使用できます。

@if project-name() == public {
  $path: 'upgrade/sprites/*.png';
} @else if project-name() == cms {
  $path: '../../../public/upgrade/sprites/*.png';
}
@import #{$path};
于 2013-03-28T13:36:37.303 に答える