Ruby 框架 - 请求入口点

标签 ruby ruby-on-rails-3 frameworks web-frameworks

我正在学习 ruby​​ 并查看他的框架。我无法理解的一件事是框架如何处理 ruby​​ 世界中的请求。深入挖掘后,我发现有一个名为 Rack 的中间件可以完成这项工作。

所以我的问题是:

  • Rack 如何处理 HTTP 请求?
  • 来自以著名的“index.php”文件作为入口点的 PHP,这是 ruby​​ 世界的对应物?

提前致谢。

最佳答案

来自机架规范:

Rack 应用程序是响应调用的 Ruby 对象(不是类)。它只接受一个参数,即环境,并返回一个恰好包含三个值的数组:状态、 header 和正文。

在实践中,启动机架应用程序的常用方式是在 config.ru 文件中定义的。如果您查看 Rails 应用程序的基本目录,您会看到它。在 rails 中,它包括 config/environment.rb,其中包括 config/application.rb,其中包括 boot.rb,其中包括 gems 和诸如此类的东西。从那时起,框架开始做它的事情。

Rails 的总体思路是调度程序接受任何请求并决定需要用它做什么。 dispatcher 可以看作等同于您提到的 index.php。

如何访问 config.ru 文件(或如何启动机架应用程序)取决于应用程序的部署方式。 Phusion Passenger 是 apache 和 nginx 的一个流行模块,它将在您添加到服务器配置文件的任何应用程序的根目录中查找 config.ru。

这实际上归结为部署选项。 Ruby 应用程序可以通过 apache/nginx 模块运行,也可以直接通过用 ruby​​ 编写的 Web 服务器运行,也可以通过 CGI 运行。

Here is a description of the different ways web apps are deployed, from the passenger docs

关于Ruby 框架 - 请求入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119204/

相关文章:

ruby-on-rails - 允许多个模型访问一个 Controller

javascript - 如何通过 Assets 管道从 Javascript 中的子文件夹提供图像

ruby-on-rails - 如何在Ruby on Rails中创建一个包罗万象的路线?

带有嵌套嵌入式框架的 iOS 8+ 框架

javascript - 如何在 Ember 3.8 中调用嵌套的 ember 组件

ruby - Sinatra 中的嵌套液体模板

ruby - 如何将 Ruby 的 STDIN 传递给 Open3.popen3 调用的外部程序?

mysql - Rails find_by 与 OR

java - 支持 html5 开发的最佳 java web 框架

ruby - ElementNotVisibleError - 特定的 Watir-Webdriver 问题