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'
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.
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.
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
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