4年多后,这仍然是一个相关的问题。似乎人们对应用程序层的含义存在混淆。
当您想到 MVC 层时,以前的答案当然是正确的,并且当您将应用程序定义为 3 层(如果它具有适当的模型、视图和控制器)时。当然,Rails 在这个意义上是默认的 3 层,正如其他人所指出的,与 ASP.NET MVC 有显着差异。
但是,我有一种感觉,原来的问题是指事情是如何部署的(我当然可能是错的,但是看这个问题的人可能仍然在寻找这个)。企业应用程序通常需要三层,因为 Web 应用程序(表示)只能与服务(业务逻辑)对话,由于网络级别的限制,以及出于安全原因,服务只能与数据库对话。
在此模型中,前端 Web 应用程序执行安全功能(防止多种类型的攻击,如 CSRF 或 Clickjacking,可能是会话管理等),并呈现从应用程序服务器上的服务读取的任何数据。这些应用程序服务器不能被最终用户直接访问,通常信任 Web 服务器(或不信任,取决于安全模型),并将其数据保存在数据库中,Web 服务器不能直接访问这些数据库。在 Windows 环境中,Web、应用程序和数据库服务器通常位于不同的域中。
正如几乎所有教程中所描述的那样,Rails 同时是一个 Web 和应用程序服务器,它不适合后一种模型,而且关于如何正确地做到这一点确实没有太多可用的资源。然而,尤其是在 Rails 5 中,很容易将 Rails 变成一个适当的服务,用作具有 API 的应用程序服务器(请参阅 API-only Applications Guide),并且还可以创建另一个 Rails 应用程序用于网络(演示)层。不过,您将不得不为自己解决很多事情,从 Web 和应用程序之间的身份验证到从 Web 到应用程序进行服务查询,尤其是现在 ActiveResource 已经退休了。