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
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
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]
cela ne causerait-il pas deux requêtes http? – bicycle
J'ai eu un problème similaire, voici comment je l'ai résolu.
Adding a prefix to every URL in CakePHP
La méthode AppHelper::url()
est l'endroit où vous devriez être intéressé par Récemment je suis tombé
à 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
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
Sauf que ce post parle de CakePHP, pas de Rails ;-) – acorncom
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