@import
symfony2 の別のバンドルの 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 ファイルに渡すと、「リンク モード」または「コピー モード」の場合に「検出」して、@import
1 つのパスまたはもう一方。
aまたはbを実装する方法はありますか? これらの 2 つの戦略の間で好みはありますか? 代替戦略はありますか?
ありがとう!シャビ。