web-dev-qa-db-fra.com

Simple Rails App: erreur ne peut pas visiter Integer

J'essaie de construire une simple application Rails. Rails v3.2.22.5 (c'est une exigence). Je l'exécute avec PostgreSQL. Quand je démarrez le serveur mais j'obtiens l'erreur suivante lorsque j'essaie de lire un simple message à partir de la base de données.

Impossible de visiter Integer

La trace m'amène à la méthode show ci-dessous. Plus précisément à la deuxième ligne. Je suis très nouveau à Rails et je n'ai absolument aucune idée de la façon de résoudre ce problème. J'ai déjà parcouru le Web sans succès. Toutes les idées seraient les bienvenues.

  def show
    @post = Post.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @post }
    end
  end

Trace complète:

arel (3.0.3) lib/arel/visitors/visitor.rb:25:in `rescue in visit'
arel (3.0.3) lib/arel/visitors/visitor.rb:19:in `visit'
arel (3.0.3) lib/arel/visitors/to_sql.rb:241:in `visit_Arel_Nodes_Limit'
arel (3.0.3) lib/arel/visitors/visitor.rb:19:in `visit'
arel (3.0.3) lib/arel/visitors/to_sql.rb:123:in `visit_Arel_Nodes_SelectStatement'
arel (3.0.3) lib/arel/visitors/visitor.rb:19:in `visit'
arel (3.0.3) lib/arel/visitors/visitor.rb:5:in `accept'
arel (3.0.3) lib/arel/visitors/to_sql.rb:19:in `accept'
activerecord (3.2.22.5) lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'
activerecord (3.2.22.5) lib/active_record/connection_adapters/abstract/query_cache.rb:60:in `select_all'
activerecord (3.2.22.5) lib/active_record/querying.rb:38:in `block in find_by_sql'
activerecord (3.2.22.5) lib/active_record/explain.rb:41:in `logging_query_plan'
activerecord (3.2.22.5) lib/active_record/querying.rb:37:in `find_by_sql'
activerecord (3.2.22.5) lib/active_record/relation.rb:171:in `exec_queries'
activerecord (3.2.22.5) lib/active_record/relation.rb:160:in `block in to_a'
activerecord (3.2.22.5) lib/active_record/explain.rb:34:in `logging_query_plan'
activerecord (3.2.22.5) lib/active_record/relation.rb:159:in `to_a'
activerecord (3.2.22.5) lib/active_record/relation/Finder_methods.rb:381:in `find_first'
activerecord (3.2.22.5) lib/active_record/relation/Finder_methods.rb:122:in `first'
app/controllers/posts_controller.rb:16:in `show'
actionpack (3.2.22.5) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.22.5) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.22.5) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.22.5) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:414:in `_run__2562463311931153568__process_action__1655262725222060869__callbacks'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.22.5) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.2.22.5) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.22.5) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.2.22.5) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.22.5) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.22.5) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.22.5) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.2.22.5) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
activerecord (3.2.22.5) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.2.22.5) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.2.22.5) lib/abstract_controller/rendering.rb:46:in `process'
actionpack (3.2.22.5) lib/action_controller/metal.rb:203:in `dispatch'
actionpack (3.2.22.5) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.2.22.5) lib/action_controller/metal.rb:246:in `block in action'
actionpack (3.2.22.5) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (3.2.22.5) lib/action_dispatch/routing/route_set.rb:36:in `call'
journey (1.0.4) lib/journey/router.rb:68:in `block in call'
journey (1.0.4) lib/journey/router.rb:56:in `each'
journey (1.0.4) lib/journey/router.rb:56:in `call'
actionpack (3.2.22.5) lib/action_dispatch/routing/route_set.rb:608:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.7) lib/rack/etag.rb:23:in `call'
rack (1.4.7) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.7) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.7) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.22.5) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.22.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:405:in `_run__2325253408966325104__call__3112622970942194936__callbacks'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.22.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.22.5) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.22.5) lib/Rails/rack/logger.rb:32:in `call_app'
railties (3.2.22.5) lib/Rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.22.5) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.22.5) lib/Rails/rack/logger.rb:16:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.7) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.7) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.22.5) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.7) lib/rack/lock.rb:15:in `call'
actionpack (3.2.22.5) lib/action_dispatch/middleware/static.rb:83:in `call'
railties (3.2.22.5) lib/Rails/engine.rb:484:in `call'
railties (3.2.22.5) lib/Rails/application.rb:231:in `call'
rack (1.4.7) lib/rack/content_length.rb:14:in `call'
railties (3.2.22.5) lib/Rails/rack/log_tailer.rb:17:in `call'
rack (1.4.7) lib/rack/handler/webrick.rb:59:in `service'
/Users/luishreis/.rbenv/versions/2.4.1/lib/Ruby/2.4.0/webrick/httpserver.rb:140:in `service'
/Users/luishreis/.rbenv/versions/2.4.1/lib/Ruby/2.4.0/webrick/httpserver.rb:96:in `run'
/Users/luishreis/.rbenv/versions/2.4.1/lib/Ruby/2.4.0/webrick/server.rb:290:in `block in start_thread'
27
luis reis

La version de Ruby que vous utilisez (2.4.1) n'est pas compatible avec la version de Rails que vous utilisez (3.2.22.5). Cette version de Ruby nécessite au moins Rails 5. Essayez de rétrograder vers Ruby 2.3 ou une version antérieure. Vous pouvez utiliser un gestionnaire de versions Ruby (c'est-à-dire rvm, rbenv ou chruby) pour contrôler quel Ruby est utilisé lors du lancement de votre application.

Éditer

Je viens de remarquer que vous utilisez déjà rbenv à partir de votre trace de pile. Ajoutez un fichier .Ruby-version Au répertoire de votre application contenant la ligne suivante:

2.3.4

Une fois que vous entrez à nouveau dans ce répertoire, confirmez la version via:

$> Ruby -v
Ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-darwin16]

(ou version similaire) avant de lancer Rails.

28

J'ai eu cette erreur hier et j'ai créé une solution de contournement qui devrait le faire fonctionner avec Ruby 2.4 et Rails 3.2.

Le commit dont j'ai eu l'idée est à: https://github.com/Rails/arel/commit/dc85a6e9c74942945ad696f5da4d82490a85b865

Incluez simplement les éléments suivants dans vos initialiseurs Rails.

module Arel
  module Visitors
    class DepthFirst < Arel::Visitors::Visitor
      alias :visit_Integer :terminal
    end

    class Dot < Arel::Visitors::Visitor
      alias :visit_Integer :visit_String
    end

    class ToSql < Arel::Visitors::Visitor
      alias :visit_Integer :literal
    end
  end
end
27
Thomas Dziedzic

Pour les futurs Googleurs. J'ai eu le même problème mais j'avais besoin d'appliquer une variante de la solution de Thomas Dziedzic.

J'ai Ruby 2.5.1 et Rails 4.2.10 en cours d'exécution sur mon système.

Comme indiqué dans cette validation ToSql a été changé de Arel::Visitors::Visitorà Arel::Visitors::Reduce

Voici donc ma solution mise à jour. Dans un Rails initialiseur mettre ceci:

module Arel
  module Visitors
    class DepthFirst < Arel::Visitors::Visitor
      alias :visit_Integer :terminal
    end

    class Dot < Arel::Visitors::Visitor
      alias :visit_Integer :visit_String
    end

    class ToSql < Arel::Visitors::Reduce
      alias :visit_Integer :literal
    end
  end
end
7
jonnyjava.net