2

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

4

5 回答 5

2

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

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

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

干杯,
m^e

于 2011-05-14T15:31:32.923 回答
1

我有一个类似的问题,我是这样解决的:
Add a prefix to each URL in CakePHP

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

于 2010-02-18T06:48:56.647 回答
1

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

RewriteCond %{REQUEST_URI} ^/css/
RewriteRule ^css/(.*)$ http://cd.yourdomain.com/css/$1 [R=301,L]
于 2010-02-18T06:38:57.180 回答
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 文件中使用绝对路径(包括域名),否则您需要确保图像也在静态服务器上。

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

干杯,院长

于 2010-02-18T06:15:33.333 回答
-1

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

config.action_controller.asset_host = "ATBTracking"

config/environments/production

于 2011-10-08T10:09:24.250 回答