航线上的机架应用?

问题描述 投票:0回答:2

在路由中使用 Rack 应用程序而不是指定操作有什么好处?我无法理解下面代码中的路线是如何工作的。

match '/admin', to: AdminApp, via: :all

我就知道这么多了。如果 Url 是

localhost/admin
,则此 URL 将匹配。
via
用于 HTTP 动词。但
AdminApp
在这里和通过做什么呢?

ruby-on-rails
2个回答
0
投票

在路由中使用Rack应用而不是指定action有什么好处

它们是两个不同的东西!操作只是处理主应用程序内特定路线的一个函数。但是,像您所展示的那样安装机架应用程序实际上是在原始应用程序中嵌入了一个完整的独立应用程序(具有自己的路线、控制器、视图等)!它甚至可以不是用 Rails 编写,而是用 Sinatra 编写,只要您安装的应用程序符合 Rack 的要求。

至于

via: :all
,表示匹配所有 http 请求动词(例如 GET、POST、PUT 等)。 https://guides.rubyonrails.org/routing.html#http-verb-constraints


0
投票

什么是AdminApp?

AdminApp
是一个兼容 Rack 的应用程序,即满足 Rack 接口的对象:一个
call
方法,它接受 HTTP 请求环境并返回一个包含状态、标头和响应正文的数组。它看起来像这样:

# lib/admin_app.rb

class AdminApp
  def self.call(env)
    # [status, headers, body]
  end
end

查看 this 帖子,了解有关 Rack 的更多信息:了解 Rack 协议和 Gem

在路由中使用 Rack 应用程序而不是指定操作有什么好处?

为什么?

有时,您可能希望将特定 URL(或一组 URL)路由到项目中的单独应用程序。此应用程序的典型用例是构建一个简单的 UI,提供与核心 Rails 应用程序分开的功能。该子应用程序与代码库的其余部分完全隔离,专门设计用于接受 Web 请求。

例如,假设您正在编写一个 gem,并且想要为 gem 的用户公开一个 Web UI。在这种情况下,您可以在 gem 中创建一个简单的 Sinatra 应用程序,并要求用户在特定 URL 上安装此 Sinatra 应用程序(这是有效的 Rack 应用程序)。

如何?

match '/url', to: RackApp

# OR

mount RackApp, at: "/url"

# OR

mount RackApp => "/url"

有关更多信息,请查看这篇文章:如何将传入 URL 路由到 Rails 中的机架应用程序

© www.soinside.com 2019 - 2024. All rights reserved.