【问题标题】:Linking to assets on a cdn with cakephp使用 cakephp 链接到 CDN 上的资产
【发布时间】:2011-01-18 04:48:44
【问题描述】:

我正准备将 cakephp 应用程序部署到网络上,并且我想将所有资产(img、js、css)移动到 CDN 以提高性能。有没有办法全局更改 HTML 助手链接到资产的位置,而不必更改每个链接。

【问题讨论】:

    标签: cakephp cdn


    【解决方案1】:

    最近我遇到了一个很酷的助手,它可以相对轻松地完成这项任务。它被称为Asset Host Helper,可以从它的GitHub repository获取。

    我最喜欢它的一点是,您无需担心更改开发副本(最有可能在 localhost 上)或生产副本(CDN 上)中的资产位置。助手会自动处理它。

    检查一下 - 这可能正是您正在寻找的工具。

    干杯,
    m^e

    【讨论】:

      【解决方案2】:

      如果路由和文件名仍然存在,也许 mod_rewrite 可能会不那么痛苦。

      RewriteCond %{REQUEST_URI} ^/css/
      RewriteRule ^css/(.*)$ http://cd.yourdomain.com/css/$1 [R=301,L]
      

      【讨论】:

      • 这不会导致两个http请求吗?
      【解决方案3】:

      我遇到了类似的问题,我是这样解决的:
      Adding a prefix to every URL in CakePHP

      AppHelper::url() 方法是您应该感兴趣的地方。

      【讨论】:

        【解决方案4】:

        我有一个解决方案,但它涉及更改核心,我知道我知道...我已经为此打了自己一巴掌;-)

        我们已经构建了一个项目,然后需要一个 CDN,所以我们只是在 HTML 和 Javascript 帮助程序中添加了一些代码来帮助我们。

        在 /cake/libs/view/helpers/html.php 文件的第 360 行添加这个

        if (Configure::read('Asset.CDN.enabled')) {
            $static_servers = Configure::read('Asset.CDN.static_servers');
        
            if(sizeof($static_servers) > 0) {
                shuffle($static_servers);
                $url = $static_servers[0].$url;
            }
        }
        

        在 /cake/libs/view/helpers/javascript.php 中的第 288 行

        if (Configure::read('Asset.CDN.enabled')) {
            $static_servers = Configure::read('Asset.CDN.static_servers');
        
            if(sizeof($static_servers) > 0) {
                shuffle($static_servers);
                $url = $static_servers[0].$url;
            }
        }
        

        然后在您的 app/config.core.php 文件中添加以下配置选项

        // Static File Serving on a CDN
        Configure::write('Asset.CDN.enabled', false);
        Configure::write('Asset.CDN.static_servers', array('http://static0.yoursite.com.au/', 'http://static1.yoursite.com.au/'));
        

        现在,当您刷新页面时,通过 html/javascript 帮助程序输出的每个文件都会自动选择一个随机静态服务器。

        请注意,除非您在 css 文件中使用绝对路径(包括域名),否则您需要确保图像也在静态服务器上。

        我知道你不应该真正在核心中玩耍,但有时它真的更容易。

        干杯, 院长

        【讨论】:

        • 你可以/应该在AppHelper::url() 中注入 URL(在从parent::url() 获取真实 URL 之后),然后你就可以停止打自己了。 ;-)
        【解决方案5】:

        我知道这是一个老问题,但如果将来有人在 rails 3.1 中偶然发现它,您现在可以使用

        config.action_controller.asset_host = "ATBTracking"
        

        config/environments/production

        【讨论】:

        • 除了这篇文章是关于 CakePHP,而不是 Rails ;-)
        猜你喜欢
        • 2020-01-09
        • 2017-06-07
        • 2018-12-21
        • 1970-01-01
        • 2012-09-04
        • 1970-01-01
        • 2017-11-13
        • 2019-03-29
        • 1970-01-01
        相关资源
        最近更新 更多