使用cakephp链接到cdn上的资产

时间:2010-02-18 05:55:09

标签: cakephp cdn

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

5 个答案:

答案 0 :(得分:2)

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

我最喜欢的是您不必担心在开发副本中更改资产的位置(很可能在localhost上)或生产副本中(在CDN上)。帮助者自动处理它。

检查出来 - 这可能只是您正在寻找的工具。

干杯,
米^ E

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我有类似的问题,这是我如何解决它:
Adding a prefix to every URL in CakePHP

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

答案 3 :(得分:0)

我有一个解决方案,但它涉及改变核心,我知道我知道......我已经拍了拍自己; - )

我们有一个已构建的项目,然后需要一个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文件中使用绝对路径(包括域名),否则您需要确保图像也在静态服务器上。

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

干杯, 迪安

答案 4 :(得分:-1)

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

config.action_controller.asset_host = "ATBTracking"
config/environments/production

中的