Приложение Simple Rails: ошибка Не удается найти Integer

Я пытаюсь создать простое приложение Rails. Rails v3.2.22.5 (это требование). Я запускаю его с PostgreSQL. Однако, когда я запускаю сервер, я получаю следующую ошибку, когда пытаюсь прочитать простую запись из базы данных.

Не удается найти Integer

След приводит меня к методу показа ниже. Более конкретно ко второй строке. Я очень новичок в Rails и понятия не имею, как это исправить. Искал веб уже без успеха. Любые идеи будут приветствоваться.

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

Полная трассировка:

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'

Ответ 1

Версия Ruby, которую вы используете (2.4.1), несовместима с версией Rails, которую вы используете (3.2.22.5). Эта версия Ruby требует, по крайней мере, Rails 5. Попробуйте понизить до Ruby 2.3 или ниже. Вы можете использовать диспетчер версий Ruby (т.е. rvm, rbenv или chruby), чтобы управлять тем, какой Ruby используется при запуске приложения.

Изменить

Только что заметил, что вы уже используете rbenv из вашей трассировки стека. Добавьте файл .ruby-version в каталог приложения, содержащий следующую строку:

2.3.4

После повторного входа в этот каталог подтвердите версию с помощью:

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

(или аналогичную версию) перед запуском рельсов.

Ответ 2

Вчера я получил эту ошибку и создал обходное решение, которое должно заставить его работать с ruby ​​2.4 и rails 3.2.

Конец, с которым я получил эту идею, находится по адресу: https://github.com/rails/arel/commit/dc85a6e9c74942945ad696f5da4d82490a85b865

Просто включите в инициализаторы рельсов следующее.

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

Ответ 3

Для будущих гуглеров. У меня была та же проблема, но мне нужно было применить вариант решения Томаса Дзедзича.

У меня в системе работает ruby 2.5.1 и rails 4.2.10.

Как показано в этом коммите, ToSql был изменен с Arel::Visitors::Visitor на Arel::Visitors::Reduce

Так что это мое обновленное решение. В инициализатор рельсов положить это:

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