Rails 路线有时找不到错误

Posted

技术标签:

【中文标题】Rails 路线有时找不到错误【英文标题】:Rails route sometime got an error not found 【发布时间】:2022-01-04 11:12:43 【问题描述】:

我的 Rails 路线有时会出现未找到错误并在几秒钟后自行解决。

undefined local variable or method owner_root_path' for #<Owner::SessionsController:0x00007f30408d46f0>
/myapp/app/controllers/owner/sessions_controller.rb:30:increate’
/ruby/2.5.0/gems/actionpack-5.1.6.2/lib/action_controller/metal/basic_implicit_render.rb:4:in send_action'
/ruby/2.5.0/gems/actionpack-5.1.6.2/lib/abstract_controller/base.rb:186:inprocess_action’

我的路线配置

# routes/owner.rb
Rails.application.routes.draw do
  constraints subdomain: /^owner/ do
    root to: "owner/top_pages#show", as: :owner_root
    ...
  end
end

# application.rb

config.paths["config/routes.rb"] = %w(
  config/routes/owner.rb
  config/routes.rb
).map |relative_path| Rails.root.join(relative_path)

有人知道为什么会这样吗?

【问题讨论】:

这种情况多久发生一次? 它不会经常或周期性发生,大约 1-2 个月会再次发生 【参考方案1】:

Rails 6.1 指南引入了draw 宏,可用于将大型路径文件拆分为较小的文件。你可以在这里阅读:Breaking up very large route file into multiple small ones

我不知道你的 Rails 版本是否支持这个宏。如果没有,那么您可以使用the source 自己轻松定义draw 方法。它会是这样的:

  def draw(routes_name)
    instance_eval(File.read(Rails.root.join("config/routes/#routes_name.rb")))
  end

P.S:你一定要看看 the commit 介绍了这个方法/宏。

【讨论】:

以上是关于Rails 路线有时找不到错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Rails 找不到我的 jbuilder 模板或不渲染它?

生产中的前缀错误 | Symfony 5 |找不到路线

如何解决 Rails 错误:找不到图像 - ../digest/md5.bundle

Rails 找不到我的部分。缺少部分错误

Rails 3.1 和 Coffeescript 出现“找不到变量”错误

Rails:用按钮隐藏记录,找不到ID错误的记录