【问题标题】: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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-15
          • 1970-01-01
          • 2013-12-10
          • 2021-09-24
          • 2011-05-11
          • 2019-10-07
          相关资源
          最近更新 更多