【问题标题】:Rails 5.1: "unknown firstpos: NilClass" - Issue reloading applicationRails 5.1:“未知的 firstpos:NilClass” - 问题重新加载应用程序
【发布时间】:2017-06-09 19:07:55
【问题描述】:

从 Rails 5.0 升级到 5.1 后,无论是在 rails server 期间的代码更改,还是从控制台调用 reload!,我都会在应用重新加载时收到此错误。

???? 13:53$ rc
Loading development environment (Rails 5.1.1)
2.3.1 :001 > reload!
Reloading...
ArgumentError: unknown firstpos: NilClass
    from (irb):1
2.3.1 :002 > 

https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/journey/gtg/builder.rb

Application Trace 为空,这是 Framework Trace:

actionpack (5.1.1) lib/action_dispatch/journey/gtg/builder.rb:99:in `firstpos'
actionpack (5.1.1) lib/action_dispatch/journey/gtg/builder.rb:22:in `transition_table'
actionpack (5.1.1) lib/action_dispatch/journey/routes.rb:58:in `simulator'
actionpack (5.1.1) lib/action_dispatch/journey/router.rb:92:in `simulator'
actionpack (5.1.1) lib/action_dispatch/journey/router.rb:28:in `eager_load!'
actionpack (5.1.1) lib/action_dispatch/routing/route_set.rb:382:in `eager_load!'
railties (5.1.1) lib/rails/application/routes_reloader.rb:26:in `each'
railties (5.1.1) lib/rails/application/routes_reloader.rb:26:in `execute'
railties (5.1.1) lib/rails/application/finisher.rb:141:in `block (2 levels) in <module:Finisher>'
activesupport (5.1.1) lib/active_support/callbacks.rb:413:in `instance_exec'
activesupport (5.1.1) lib/active_support/callbacks.rb:413:in `block in make_lambda'
activesupport (5.1.1) lib/active_support/callbacks.rb:197:in `block (2 levels) in halting'
activesupport (5.1.1) lib/active_support/callbacks.rb:601:in `block (2 levels) in default_terminator'
activesupport (5.1.1) lib/active_support/callbacks.rb:600:in `catch'
activesupport (5.1.1) lib/active_support/callbacks.rb:600:in `block in default_terminator'
activesupport (5.1.1) lib/active_support/callbacks.rb:198:in `block in halting'
activesupport (5.1.1) lib/active_support/callbacks.rb:507:in `block in invoke_before'
activesupport (5.1.1) lib/active_support/callbacks.rb:507:in `each'
activesupport (5.1.1) lib/active_support/callbacks.rb:507:in `invoke_before'
activesupport (5.1.1) lib/active_support/callbacks.rb:130:in `run_callbacks'
activesupport (5.1.1) lib/active_support/execution_wrapper.rb:108:in `run!'
activesupport (5.1.1) lib/active_support/reloader.rb:113:in `run!'
activesupport (5.1.1) lib/active_support/execution_wrapper.rb:70:in `block in run!'
activesupport (5.1.1) lib/active_support/execution_wrapper.rb:67:in `tap'
activesupport (5.1.1) lib/active_support/execution_wrapper.rb:67:in `run!'
activesupport (5.1.1) lib/active_support/reloader.rb:59:in `run!'
actionpack (5.1.1) lib/action_dispatch/middleware/executor.rb:10:in `call'
actionpack (5.1.1) lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
actionpack (5.1.1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.1.1) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.1.1) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.1.1) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.1.1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.1.1) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.1.1) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.0) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.1.1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
request_store (1.3.2) lib/request_store/middleware.rb:9:in `call'
actionpack (5.1.1) lib/action_dispatch/middleware/request_id.rb:25:in `call'
rack (2.0.3) lib/rack/method_override.rb:22:in `call'
rack (2.0.3) lib/rack/runtime.rb:22:in `call'
activesupport (5.1.1) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
actionpack (5.1.1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.1.1) lib/action_dispatch/middleware/static.rb:125:in `call'
rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
railties (5.1.1) lib/rails/engine.rb:522:in `call'
puma (3.9.1) lib/puma/configuration.rb:224:in `call'
puma (3.9.1) lib/puma/server.rb:602:in `handle_request'
puma (3.9.1) lib/puma/server.rb:435:in `process_client'
puma (3.9.1) lib/puma/server.rb:299:in `block in run'
puma (3.9.1) lib/puma/thread_pool.rb:120:in `block in spawn_thread'

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-5.1 actiondispatch


【解决方案1】:

我刚刚遇到了完全相同的问题。我通过设置解决了它:

config/environments/development.rb

来自:

# Do not eager load code on boot.
config.eager_load = true

到:

**# Do not eager load code on boot.
config.eager_load = false

希望这会有所帮助! 干杯,尼克。

【讨论】:

  • 我更喜欢在开发启动时使用 eager_load 作为一种静态代码分析器。如果您有语法错误anywhere,您会立即知道。也就是说,我还是尝试了它,不幸的是它没有任何效果。我还尝试构建一个新的 Rails 5.1.1 应用程序,两种方式都按预期工作,有和没有弹簧......嗯
  • 为我工作,但仍然必须有另一种方法来做到这一点(或者为什么从 5.1 开始会有这个选项)
  • 为了解决这个问题而禁用 Rails 的一个关键特性似乎是非常不可取的,更不用说某些人可能需要的特性了。
【解决方案2】:

找到解决方法! https://github.com/rails/rails/pull/32296

拉取请求未合并,并且可能只会在 5.2+ 中。添加带有单行更改的猴子补丁完全解决了我的问题。

config/initializers/routes.rb

# MONKEY PATCH!!!
# https://github.com/rails/rails/pull/32296
#
# Fixes:
# * Development mode deadlocks
# * ArgumentError: unknown firstpos: NilClass
#
# Allows use of "config.eager_load = true"


module ActionDispatch
  module Journey
    class Routes
      def simulator
        @simulator ||= begin
          gtg = GTG::Builder.new(ast).transition_table unless ast.blank?
          GTG::Simulator.new(gtg)
        end
      end
    end
  end
end

【讨论】:

【解决方案3】:

好像是春挂什么的。只需运行spring stop,它就会消失。或者,您可以像这样在没有弹簧的情况下启动 rails 控制台:

DISABLE_SPRING=true rails c.

【讨论】:

  • 我不运行 Spring,当它被引入时我们遇到了问题,从那以后就再也没有打扰过它。现在我刚刚推迟了我的 5.1 升级。 5.0 运行良好。
  • 对我没有帮助
【解决方案4】:

在将 Rails 从 5.1 升级到 5.2 后,我开始遇到这个问题
它得到了解决:

spring stop
spring binstub --all
spring start
rails s

【讨论】:

  • 这实际上对我有用!不需要猴子补丁,谢谢!必须看看它是否持续,但如果它持续,那就太好了:)
  • 这确实为spring, rake, rspec, rails 修改了我的binstubs,但它并没有使错误消失
【解决方案5】:

您不会在生产环境和测试环境中遇到此错误(如果您不使用 Spring)。 因为这个错误“ArgumentError: unknown firstpos: NilClass”当它试图重新加载你的一些类时你进入了“reload”。

在生产和测试环境中,所有东西都在缓存中,所以你所有的东西都会被缓存,不会发生错误

不幸的是(目前)对于开发环境,我也发现只有这个解决方案

config.eager_load = false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多