【发布时间】:2015-04-01 02:16:38
【问题描述】:
我有一个 Rails 应用程序,它有几个视图工作。我做了一些我无法轻易恢复的更改(我知道,大错特错,主要是视图)。我相信我正确地遵循了 Rails 文件夹结构约定,因为视图正常工作。现在,当我尝试在浏览器中查看 ANY 视图时,出现以下错误:
ActionController::RoutingError (undefined method `each' for nil:NilClass):
app/controllers/application_controller.rb:1:in `<top (required)>'
app/controllers/instance_controller.rb:4:in `<top (required)>'
我没有在 application_controller 或 instance_controller 中调用每一个。 instance_controller 是与我要渲染的视图相关的控制器。如果我使用不同的视图,我将在错误消息中看到不同的控制器,而不是 instance_controller。 Application_controller 是 instance_controller 的父级。即使更改为仅包含一些纯文本或 JSON 的空视图也会产生相同的错误。我是否有一些潜在的 Rails 东西发生了,可能被覆盖了?总的来说,对于 MVC 和 Rails 来说还是很新的。即使你不能给我确切的答案,但也许是要检查的事项清单,任何事情都会有所帮助。
application_controller:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end
instance_controller:
require 'openssl'
require 'base64'
include HTTParty
class InstanceController < ApplicationController
def index
@tab = 'instance'
@server_list = Server.get_server_list()
@instances = ::ServerList.get_instances_on_all_servers
end
def self.update_credentials
Rails.logger.info(params.to_s)
in__hash = {
<some parameters>
}
response = put(
<some_path_I_can't_post>
)
end
end
编辑:请求的附加信息,config/routes.rb:
Rails.application.routes.draw do
resources :server
resources :instance
end
运行 rake 路由的输出:
Prefix Verb URI Pattern Controller#Action
server_index GET /server(.:format) server#index
POST /server(.:format) server#create
new_server GET /server/new(.:format) server#new
edit_server GET /server/:id/edit(.:format) server#edit
server GET /server/:id(.:format) server#show
PATCH /server/:id(.:format) server#update
PUT /server/:id(.:format) server#update
DELETE /server/:id(.:format) server#destroy
instance_index GET /instance(.:format) instance#index
POST /instance(.:format) instance#create
new_instance GET /instance/new(.:format) instance#new
edit_instance GET /instance/:id/edit(.:format) instance#edit
instance GET /instance/:id(.:format) instance#show
PATCH /instance/:id(.:format) instance#update
PUT /instance/:id(.:format) instance#update
DELETE /instance/:id(.:format) instance#destroy
我们有 app/controllers/instance_controller.rb,并且 app/controllers/application_controller.rb 用于路径。
编辑 2(已解决): 我一直在使用 unicorn_rails 来部署我的网站。我不知道为什么,但我认为我的独角兽服务器在每次请求时都会超时。重新启动服务器进程消除了这些错误。
【问题讨论】:
-
ActionController::RoutingError --> 在 config/routes.rb 中发布相关路由以及您为该特定控制器拥有的文件夹结构。
-
我发布了您要求的信息。
-
如果我不得不猜测的话,我会说这是为
instance命名您的文件夹或目录(M、V 或 C)之一。您是否曾在某一时刻手动重命名任何内容,或者在某处意外地使用了复数形式?那些ActionController::RoutingError错误通常意味着路由没有找到正确的视图或控制器。还要检查类名是否正确并与文件名匹配。 -
三遍检查后,我决定重启独角兽服务器,所有错误都消失了。
标签: ruby-on-rails ruby