2010-02-18 5 views
2

Je me prépare à déployer une application cakephp sur le web et je veux déplacer tous les assets (img, js, css) vers un CDN pour augmenter les performances. Existe-t-il un moyen de changer globalement l'emplacement que l'assistant HTML lie aux ressources au lieu d'avoir à changer chaque lien.Liens vers des assets sur un cdn avec cakephp

Répondre

0

J'ai une solution mais il implique de changer le cœur, je sais que je sais ... Je me suis déjà giflé pour le faire ;-)

Nous avions un projet qui a été construit et avait besoin d'un CDN si nous venons d'ajouter un peu de code aux assistants HTML et Javascript pour nous aider.

Dans le fichier /cake/libs/view/helpers/html.php ajouter cette ligne à 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; 
    } 
} 

et dans le cul /cake/libs/view/helpers/javascript.php ce à la ligne 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; 
    } 
} 

ensuite dans votre app/fichier config.core.php ajoutez les options de configuration suivantes

// 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/')); 

maintenant, quand vous REFr esh votre page chaque fichier qui est sorti par l'aide html/javascript choisira automatiquement un serveur statique aléatoire. Notez que si vous n'utilisez pas de chemins absolus (y compris les noms de domaine) dans vos fichiers CSS, vous devez vous assurer que les images se trouvent également sur le serveur statique.

Je sais que vous ne devriez pas vraiment jouer dans le noyau, mais parfois c'est vraiment plus facile.

Cheers, Dean

+0

Vous pouvez/devrait injecter l'URL dans 'AppHelper :: url()' (après avoir obtenu l'URL réelle de 'parent :: url()'), alors vous pourriez arrêter de vous gifler. ;-) – deceze

1

Si les routes et les noms de fichiers persistent, peut-être mod_rewrite pourrait être moins douloureux.

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

cela ne causerait-il pas deux requêtes http? – bicycle

2

à travers cette aide cool que accomplit cette tâche avec une relative facilité. Il est appelé Asset Host Helper et peut être obtenu auprès de GitHub repository. Ce que j'ai préféré, c'est que vous n'avez pas à vous soucier de changer l'emplacement des ressources dans votre copie de développement (probablement sur localhost) ou dans votre copie de production (sur le CDN). L'assistant s'en occupe automatiquement.

Jetez un coup d'œil - c'est peut-être l'outil que vous recherchez.

Cheers,
m^e

-1

Je sais que c'est une vieille question, mais dans le cas où toutes les personnes à venir tomberez sur dans les rails 3.1 vous pouvez maintenant utiliser

config.action_controller.asset_host = "ATBTracking" 

dans config/environments/production

+0

Sauf que ce post parle de CakePHP, pas de Rails ;-) – acorncom

Questions connexes