我正准备将 cakephp 应用程序部署到网络上,并且我想将所有资产(img、js、css)移动到 CDN 以提高性能。有没有办法全局更改 HTML 帮助程序链接到资产的位置,而不必更改每个链接。
5 回答
最近我遇到了这个很酷的助手,它可以相对轻松地完成这项任务。它被称为Asset Host Helper,可以从其GitHub 存储库中获取。
我最喜欢它的是,您无需担心更改开发副本(很可能在 localhost 上)或生产副本(CDN 上)中资产的位置。助手会自动处理它。
检查一下 - 这可能正是您正在寻找的工具。
干杯,
m^e
我有一个类似的问题,我是这样解决的:
Add a prefix to each URL in CakePHP
该AppHelper::url()
方法是您应该感兴趣的地方。
如果路由和文件名仍然存在,也许 mod_rewrite 可能会不那么痛苦。
RewriteCond %{REQUEST_URI} ^/css/
RewriteRule ^css/(.*)$ http://cd.yourdomain.com/css/$1 [R=301,L]
我有一个解决方案,但它涉及改变核心,我知道我知道......我已经为此打了自己一巴掌;-)
我们有一个已构建的项目,然后需要一个 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 文件中使用绝对路径(包括域名),否则您需要确保图像也在静态服务器上。
我知道你不应该真正在核心中玩耍,但有时它真的更容易。
干杯,院长
我知道这是一个老问题,但如果将来有人在 rails 3.1 中偶然发现它,您现在可以使用
config.action_controller.asset_host = "ATBTracking"
在config/environments/production