2010-02-18 70 views
2

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

回答

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; 
    } 
} 

然后在你的应用程序/文件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/')); 

当你REFR通过html/javascript助手输出的每个文件都会自动选择一个随机的静态服务器。

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

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

干杯, 院长

+0

你可以/应该注入URL中'AppHelper :: URL()'(从'父:: URL()'得到真正的URL后)那么你可以停止抨击自己。 ;-) – deceze 2010-02-18 06:45:11

1

如果路径和文件名坚持,也许mod_rewrite的可能是痛苦少。

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

不会导致两个http请求? – bicycle 2013-07-28 07:39:53

2

最近我碰到这个凉爽的帮手来了相对容易地完成这项任务。它被称为Asset Host Helper并且可以从其GitHub repository获得。

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

看看 - 这可能只是你正在寻找的工具。

干杯,
平方公尺Ë

-1

我知道这是一个老问题,但在任何情况下,未来的人们轨道3越过它绊倒。1,你现在可以使用

config.action_controller.asset_host = "ATBTracking" 

config/environments/production

+0

除了这篇文章是关于CakePHP,不是Rails ;-) – acorncom 2014-06-21 16:12:21