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