【问题标题】:Share resources among multiple CakePHP webroots on Windows / IIS?在 Windows / IIS 上的多个 CakePHP webroot 之间共享资源?
【发布时间】:2010-08-12 15:41:57
【问题描述】:
我安装了一个运行六个不同网站的 CakePHP,每个网站都有自己的 webroot。所有基本代码都是相同的(控制器、模型等),只是 css、图像、js 等被拆分为单独的 webroot(app/webroot、app/webroot_second_site、app/webroot_third_site 等)
我的问题是:有没有办法在 webroot 之间共享公共资源?所以我们没有六个不同的 TinyMCE 和 jQuery 副本让我们的项目变得混乱,对我来说更重要的是,这样我们就可以在一个通用的 CSS 文件中进行更改,而不必在六个不同的站点之间复制/粘贴更改。文件夹?
如果这些站点在 Linux 机器上运行,我认为通过从每个 webroot 到目录树中更高的公共文件夹的符号链接可以很容易地完成,但我们运行的是 Windows Server 2003 / IIS 6. 有什么建议吗?
【问题讨论】:
标签:
cakephp
iis-6
windows-server-2003
cakephp-1.3
【解决方案1】:
原来你可以在 NTFS 文件系统中做目录符号链接。或者至少足够接近实用目的。 “NTFS Junctions”将满足您的需求。
使用 Sysinternals “Junction” 程序获取一个简单的命令行程序来创建/删除这些连接点。
然后,您可以将所需的任何公共目录链接到单个主目录。
例如,如果您有
webroot1/
webroot2/
webroot3/
每个都有自己的“js/”目录,然后你可以创建
webroot_common/js/
然后符号链接...呃,像这样“创建连接”到那个新目录:
junction webroot1/js/common webroot_common/js
junction webroot2/js/common webroot_common/js
junction webroot3/js/common webroot_common/js
(是的,"junction" 程序从 Linux "ln -s" 向后获取输入)
然后,您可以将所需的任何常用 js 文件(如 jQuery)放在该常用文件夹中,并将任何特定于站点的 js 文件留在“webrootX/js”中。
【解决方案2】:
你可以制作一个静态服务器。将 DNS 条目添加到 static.yoursite.com 之类的内容。从您的其他站点链接到这些文件 - 可能您只需修改 HTML 帮助程序,以便它自动创建到其他域的链接。
这有助于提高性能,因为您可以运行 nginx 之类的东西来提供这些静态文件。它还将并行化资源检索——大多数浏览器将允许到给定服务器的 2 个连接,因此静态内容与动态内容所需的连接资源竞争。本质上,用户将启动 2 个与您的动态内容的连接以及 2 个与静态资源的连接。
IME 效果很好。
【解决方案3】:
这会奏效。您将需要重新定义 Windows 服务器的目录,但您会很好地理解它。
首先,将你的 APP 和 CAKE 目录放在 public_html 之上。
/var/www/app
/var/www/cake
确保文件夹 cake 中包含所有蛋糕文件夹(蛋糕、供应商等)
将您的网站指向其 public_html 目录。
/var/www/html/site1
/var/www/html/site2
webroot 内容将位于每个 public_html 目录中。现在,修改每个 webroot 中的 index.php 文件以指向同一个应用程序:
if (!defined('ROOT')) {
define('ROOT', DS.'var'.DS.'www'.DS.'app');
}
if (!defined('APP_DIR')) {
define('APP_DIR',dirname('app'));
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS.'var'.DS.'www'.DS.'cake');
}
当然要确保重写已打开。然后它将全部运行相同的代码,但使用提供 index.php 的 webroot。