代码之家  ›  专栏  ›  技术社区  ›  Curtis Gibby

在Windows/IIS上的多个cakephp webroots之间共享资源?

  •  0
  • Curtis Gibby  · 技术社区  · 16 年前

    我安装了一个cakephp,运行六个不同的网站,每个网站都有自己的webroot。所有的基本代码都是相同的(控制器、模型等),只是CSS、图像、JS等被分割成单独的webroots(app/webroot、app/webroot-second-site、app/webroot-third-site等)。

    我的问题是:有没有一种方法可以在网络根中共享共同的资源?因此,我们没有6个不同的Tinymce和jQuery副本,把我们的项目搞得一团糟,对我来说更重要的是,这样我们就可以在一个普通的CSS文件中进行更改,而不必在6个不同站点的文件夹中复制/粘贴更改?

    如果这些站点运行在Linux设备上,我认为通过从每个Webroot到目录树中更高位置的公用文件夹的符号链接可以相当容易地完成,但是我们运行的是Windows Server 2003/IIS6。有什么建议吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Snelg    16 年前

    原来你 可以 在NTFS文件系统中执行目录符号链接。或者至少足够近以达到实际目的。”“NTFS连接”可以满足您的需要。 为一个简单的命令行程序抓取系统内部的“连接”程序来创建/删除这些连接。 然后,您可以将所需的任何公共目录链接到单个主目录。 例如,如果你有

    WebOLT1/ WEBROT2// WEBROT3/

    每个目录都有自己的“js/”目录,然后您可以创建

    webroot_公用/js/

    然后symlink…呃,“创建连接”到新目录,如下所示:

    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
  •  0
  •   Travis Leleu    16 年前

    您可以创建一个静态服务器。向static.yoursite.com之类的网站添加一个DNS条目。从其他站点链接到这些文件——也许您可以修改HTML助手,以便它自动创建到其他域的链接。

    这有助于提高性能,因为您可以运行nginx之类的东西来服务这些静态文件。它还将并行资源检索——大多数浏览器将允许2个连接到一个给定的服务器,因此静态的东西与动态的东西所需要的连接资源竞争。从本质上讲,用户将启动2个到动态资源的连接,以及2个到静态资源的连接。

    很好用。

        3
  •  0
  •   Chuck Burgess    16 年前

    这会奏效的。您将需要重新定义Windows服务器的目录,但您将足够了解它。

    首先,把你的应用和蛋糕目录放在一个高于公共HTML的级别。

    /var/www/app
    /var/www/cake
    

    确保文件夹cake中包含所有cake文件夹(cake、vendors等)。 将您的站点指向它们的公共HTML目录。

    /var/www/html/site1
    /var/www/html/site2
    

    webroot内容将位于每个公共的html目录中。现在,修改您的 index.php 每个webroots中指向同一应用程序的文件:

    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。