我们在symfony2的另一个bundle的scss文件的@import
中遇到了问题。
- 源代码(hg repo)位于机器a的
/files/...
中。 - 在devel中,apache从机器A的
/var/www/...
服务,链接到机器A的/files/...
。 - 在生产环境中,apache从机器B的
/var/www/...
提供服务,其中复制了源文件。
让我们关注一个包含着色和大小定义的Layout.scss
文件。这些是我的路径:
# 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)也许我可以从参数。ini或类似的。scss文件中传递一个"变量",这样我就可以"发现",如果我处于"链接模式"或"复制模式",并使@import
使用一个路径或另一个。
有办法实现a或b吗?这两种策略有什么偏好吗?还有别的策略吗?
谢谢!哈维。
两种方法都可行。
a)也许我可以配置一些东西,让PHP看到"不映射符号链接的相对路径"。
确保您的Apache配置已启用FollowSymLinks, PHP配置已在include_path中包含所有项目目录。
b)也许我可以从参数。ini或类似的。scss文件中传递一个"变量",这样我就可以"发现",如果我处于"链接模式"或"复制模式",并使@import使用一个路径或另一个。
创建一个自定义SASS函数,根据调用的项目返回不同的结果。这将允许从public/sass/upgrade/index导入不同的路径。SCSS取决于你正在编译的项目。
参见Compass:从另一个项目目录导入文件以了解两者的详细信息。