1

@importsymfony2 の別のバンドルの scss ファイルに問題があります。

  • ソース コード (hg リポジトリ)/files/...はマシン Aに存在します。
  • devel では、apache はマシン A からサービスを提供し/var/www/...、マシン A にリンク/files/...ます。
  • 本番環境では、apache は/var/www/...マシン Bから提供され、ソース ファイルのコピーが内部に含まれます。

Layout.scss色とサイズの定義を含む1 つのファイルに注目してみましょう。これらは私の道です:

# Source code (machine A)
xavi@bromo$ cd /files/custom_www/guparty/workspace/guparty/Applications/Common/bundles/LayoutBundle/Resources/public/Sass
xavi@bromo$ ls -l Layout.scss
-rw-rw-r-- 1 xavi xavi 7528 2013-03-28 12:18 Layout.scss

# Devel (machine A)
xavi@bromo$ cd /var/www/guparty/workspace/www/frontend/src/gUparty/
xavi@bromo$ ls -l Common
lrwxrwxrwx 1 xavi xavi 71 2013-03-28 12:26 Common -> /files/custom_www/guparty/workspace/guparty/Applications/Common/bundles

# Production (machine B)
ubuntu@ProductionLarge1$ cd /var/www/www.guparty.com/src/gUparty/
ubuntu@ProductionLarge1$ ls -ld Common/
drwxr-xr-x 21 www-data www-data 4096 2013-03-28 07:35 Common/

Test.scss次に、前のファイルをインクルードするファイルについて考えてみましょう。

# Seen from the source code point of view:
/files/custom_www/guparty/workspace/guparty/Applications/FrontEnd/bundles/TestingBundle/Resources/public/Sass/Test.scss

# Seen from the devel apache point of view (links to the one above):
/var/www/guparty/workspace/www/frontend/src/gUparty/FrontEnd/TestingBundle/Resources/public/Sass/Test.scss

# Seen from the production apache point of view:
/var/www/www.guparty.com/src/gUparty/FrontEnd/TestingBundle/Resources/public/Sass/Test.scss

ファイルは、次のようなディレクティブTest.scssで始まります。@import

@import "../../../../../../../src/gUparty/Common/LayoutBundle/Resources/public/Sass/Layout.scss";

トラブル

ファイルのコピーを含む生産マシンから見ると、それは魅力のように機能します。

それにもかかわらず、開発マシンから実行する場合、相対パスが同じであるため、動作することを期待していました。代わりに、オペレーティング システムはリンクされたファイルを apache/php に表示せず、アセットが実際のパスを「知る必要がある」ように見えます。

devel では、インポートが失敗し、@importこれに変更すると正常に動作します。

@import "../../../../../../../Applications/Common/bundles/LayoutBundle/Resources/public/Sass/Layout.scss";

解決策はあるが、実装方法がわからない

a)PHPが「シンボリックリンクをデマッピングせずに相対パス」を認識するように、何かを構成できるかもしれません。

b) parameters.ini などから「変数」を .scss ファイルに渡すと、「リンク モード」または「コピー モード」の場合に「検出」して、@import1 つのパスまたはもう一方。

aまたはbを実装する方法はありますか? これらの 2 つの戦略の間で好みはありますか? 代替戦略はありますか?

ありがとう!シャビ。

4

1 に答える 1

0

どちらのソリューションも可能です。

a)PHPが「シンボリックリンクをデマッピングせずに相対パス」を認識するように、何かを構成できるかもしれません。

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

b) parameters.ini などから「変数」を .scss ファイルに渡すことができるので、「リンク モード」または「コピー モード」の場合は「検出」し、@import でいずれかを使用することができます。パスまたはその他。

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

両方の詳細については、コンパス: 別のプロジェクト ディレクトリからのファイルのインポートを参照してください。

于 2013-03-28T15:37:05.943 に答える