2010-09-13 2 views
2

Je travaille sur une application rails qui a un tas (des centaines) d'images qui sont hébergées sur un serveur S3. Pour avoir des aides comme point de image_tag ici je devais ajouter ce par config/environnements/development.rb test.rb et production.rb:Rails: Images sur un serveur, CSS et Javascript sur un autre

config.action_controller.asset_host = "http://mybucket.s3.amazonaws.com" 

Cependant, cela signifie aussi qu'il semble là pour CSS et Javascript. C'est une énorme douleur parce que chaque fois que je change le CSS, je dois le télécharger à nouveau sur Amazon.

Alors ... Y at-il un moyen facile de faire en sorte que mon application ressemble à Amazon pour les images, mais localement pour CSS/Javascript?

(j'utilise Rails 3.0)

Répondre

6

Vous pouvez transmettre un objet Proc à config.action_controller.asset_host et lui demander de déterminer le résultat par programmation lors de l'exécution.

config.action_controller.asset_host = Proc.new do |source| 
    case source 
    when /^\/(images|videos|audios)/ 
    "http://mybucket.s3.amazonaws.com" 
    else 
    "http://mydomain.com" 
    end 
end 

mais laissé tel quel, cela vous donnera http://mybucket.s3.amazonaws.com/images/whatever.png lorsque vous utilisez image_tag :whatever.

Si vous souhaitez modifier le chemin aussi bien, vous pouvez faire quelque chose de très similaire avec config.action_controller.asset_path

config.action_controller.asset_path = Proc.new do |path| 
    path.sub /^\/(images|videos|audios)/, "" 
end 

qui vous donnerait http://mybucket.s3.amazonaws.com/whatever.png combiné avec l'ancien.

0

Il n'y a rien qui vous empêche de passer URL complète image_tag: image_tag("#{IMAGE_ROOT}/icon.png"). Mais pour moi, déplacer des images statiques (icônes, arrière-plans, etc.) vers S3 et quitter les fichiers stylesheets/js sur des rails semble un peu incohérent. Vous pouvez les déplacer tous vers S3 ou configurer Apache pour la mise en cache (si vous avez peur que les utilisateurs tirant de grandes images créent trop de frais généraux pour Rails).

BTW, vous ne devez pas mettre config.action_controller... dans les fichiers de configuration pour les trois environnements: placer cette ligne juste en config/environment.rb aura le même effet.

+0

J'ai pensé faire IMAGE_ROOT mais ça ne semble pas très sec. Et avoir le CSS localement est juste pour le développement. Finalement, ils seraient tous sur S3 – dpieri

+0

@ pieri434 Pourquoi n'avez-vous pas à la fois des images et des feuilles de style pour le développement, alors? La console Amazon S3 devrait vous permettre d'exporter des images facilement. –

Questions connexes