Problème de mise en cache d'actions

Problème de mise en cache d'actions - Ruby/Rails - Programmation

Marsh Posté le 02-07-2008 à 08:46:04    

Bonjour,
 
Je veux mettre en place un système de mise en cache sur mon site en Rails. Dans le cas d'actions demandant une verification des droits de l'utilisateur, je veux avoir recours à caches_action afin que les filtres soient executés.
Voilà mon code :
 

Code :
  1. class UsersController < ElementsController
  2.    
  3.     before_filter :login_required
  4.  
  5.      access_control :DEFAULT=>'admin'
  6.      
  7.          
  8.       caches_action :index,
  9.                     :show
  10.    
  11.      cache_sweeper :user_sweeper,
  12.                   :only => [:create,
  13.                              :update,
  14.                              :delete]
  15.    
  16.      # GET /users
  17.      # GET /users.xml
  18.      def index
  19.        super
  20.      end
  21.   ....
  22.    
  23.   end


 
Le problème est que je me mange l'erreur suivant quand j'essaie d'accèder à la page en question :
 

Citation :


NoMethodError (undefined method `[]' for #<Enumerable::Enumerator:0xb7269c08> ):
    /vendor/rails/activerecord/lib/../../activesupport/lib/active_support/core_ext/string/access.rb:53:in `last'
    /vendor/rails/actionpack/lib/action_controller/caching.rb:247:in `normalize!'
    /vendor/rails/actionpack/lib/action_controller/caching.rb:236:in `path'
    /vendor/rails/actionpack/lib/action_controller/caching.rb:195:in `before'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:598:in `proxy_before_and_after_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:470:in `call'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:470:in `call'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:438:in `call'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:438:in `call'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:438:in `call'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:438:in `call'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:619:in `perform_action_without_benchmark'
    /vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
    /usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
    /vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
    /vendor/rails/actionpack/lib/action_controller/rescue.rb:83:in `perform_action'
    /vendor/rails/actionpack/lib/action_controller/base.rb:430:in `send'
    /vendor/rails/actionpack/lib/action_controller/base.rb:430:in `process_without_filters'
    /vendor/rails/actionpack/lib/action_controller/filters.rb:624:in `process_without_session_management_support'
    /vendor/rails/actionpack/lib/action_controller/session_management.rb:114:in `process'
    /vendor/rails/actionpack/lib/action_controller/base.rb:330:in `process'
    /vendor/rails/railties/lib/dispatcher.rb:41:in `dispatch'
    /vendor/rails/railties/lib/fcgi_handler.rb:168:in `process_request'
    /vendor/rails/railties/lib/fcgi_handler.rb:143:in `process_each_request!'
    /vendor/rails/railties/lib/fcgi_handler.rb:109:in `with_signal_handler'
    /vendor/rails/railties/lib/fcgi_handler.rb:142:in `process_each_request!'
    /usr/lib/ruby/1.8/fcgi.rb:612:in `each_cgi'
    /usr/lib/ruby/1.8/fcgi.rb:609:in `each'
    /usr/lib/ruby/1.8/fcgi.rb:609:in `each_cgi'
    /vendor/rails/railties/lib/fcgi_handler.rb:141:in `process_each_request!'
    /vendor/rails/railties/lib/fcgi_handler.rb:55:in `process!'
    /vendor/rails/railties/lib/fcgi_handler.rb:25:in `process!'
    /var/www/rails/esoxCMS/public/dispatch.fcgi:26


 
Le pire c'est qu'avec caches_page ça marche parfaitement ...  
Avez vous une idée?
 
Merci d'avance
 
P.S: Le fait que index ne fasse pas grand chose, c'est juste à des fin de debugging..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-07-2008 à 08:46:04   

Reply

Marsh Posté le 15-07-2008 à 15:55:49    

C'est mon tuto préféré dans ce domaine: http://www.railsenvy.com/2007/2/28 [...] g-tutorial
 
Tu es sûr que ton fichier view est bien codé aussi?

Reply

Marsh Posté le 15-07-2008 à 18:22:48    

J'ai résolu le problème (merci à toi).
En fait ça venait d'un problème de version entre les gems installées et rails .. J'ai fait un peu le ménage et là ça marche nickel :D

Reply

Marsh Posté le 16-07-2008 à 21:35:35    

C'était quoi le problème en fait? Parce que je vois pas du tout en quoi j'ai pu t'être utile. Tu utilisais du deprecated code quelque part?
 
Je trouve que c'est un poil pénible que lors d'une mise à jour des gems, il garde en parallèle l'ancienne version, je suis pas sûr que ce soit bénéfique une telle approche.

Reply

Marsh Posté le 16-07-2008 à 22:17:16    

Salut,
Je crois que au début du développement (quand j'apprenais) j'avais (peut-être en faisant un gem freeze) inclus le code de certain gems (ActionController, ...) dans l'arborescence de mon projet.  
Du coup en utilisant certains nouveaux plugin&co (qui ont été faits pour rails 1.2+) ça foutait sa merde.
Donc en supprimant cette partie de l'arborescence (et donc en utilisant les gem installés simplement par gem install, et donc maintenus à jour) tout est rentré dans l'ordre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed