2010-02-18 101 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