ruby-on-rails - 运行本地 Web 服务器是什么意思?

标签 ruby-on-rails ruby http webserver

我可以使用 Ruby on Rails/JS/HTML/CSS 进行编程和开发,以制作全栈应用。但是,我对 HTTP 请求/响应周期的理解存在漏洞。以下几点是否正确?

  • 如果我制作一个 Rails 应用程序,并在命令行上键入 rails server,我会得到一个本地服务器,我可以向其发出请求。如果我打开浏览器,输入 localhost:3000,然后按回车键,我就会向本地服务器发出 HTTP 请求。
  • Rails 默认使用名为 WEBrick 的网络服务器,但也有其他服务器,如 Thin、Puma 和 Unicorn。这些都是软件,之所以成为网络服务器,是因为该软件实现了处理 HTTP 请求的功能。
  • 当我运行本地网络服务器时,这意味着我的计算机正在运行这些监听 HTTP 请求的软件之一。

以上是“运行本地网络服务器”的意思吗?

  • 我见过“运行本地网络服务器”的其他方法示例。其中之一是在项目目录中运行 npm install -g http-server,然后导航到 localhost:8080。这也是开始运行并在端口 8080 上接受 HTTP 请求的软件吗?
  • 在 Ruby 命令行上,安装 rack gem:gem install rack。然后在一个新的 Ruby 文件中,我们需要'rack',启动一个网络服务器:

Rack::Server.start({ app: MySimpleApp, port: 3000 })

然后我们可以定义一个 web 应用程序 MySimpleApp 是机架兼容的(响应 call 方法的对象):

class MySimpleApp
  def self.call
    (...)
  end
end

现在当我们在浏览器中导航到 localhost:3000 时,MySimpleApp 就会被执行。 rack 只是在运行它的默认 WEBrick 服务器吗?上面的命令只是简单地运行本地网络服务器并定义当 HTTP 请求进入时要做什么(执行 MySimpleApp)?

最佳答案

您的理解非常正确。 HTTP 只是一种基于文本的协议(protocol),与许多协议(protocol)一样,它在 TCP/IP 上运行。

内置的 WEBrick 服务器并不是用 Ruby 编写的 HTTP 服务器的最佳示例,但出于遗留原因将其包括在内,因为它通常“足够好”,可以帮助您入门。 Pow相当好,尽管它是由生产 Rails 的同一家公司生产的,但它主要是用 Node 编写的。

与许多基于 Internet 的协议(protocol)一样,HTTP 的美妙之处在于,只要您遵守标准,使用何种语言并不重要。

Rack 是一个在 HTTP 之后运行的层,并在请求/响应周期上提供一个薄的抽象层。

关于ruby-on-rails - 运行本地 Web 服务器是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37170005/

相关文章:

ruby-on-rails - 错误-迁移正在进行中。要解决此问题,请运行:bin/rake db:migrate RAILS_ENV = development

c - 简单的 HTTP 客户端 c recv() block

java - 计算通过 HTTP 发送/接收的字节数

ruby-on-rails - Array 或 ObjectType 作为参数 GraphQL rails

ruby-on-rails - Rails:ActiveSupport::HashWithIndifferentAccess:Class 的未定义方法 `primary_key'

ruby-on-rails - 测试与 alias_attribute 的关联

ruby - 如何使用 Ruby block 在 Chef Recipe 中分配变量

mysql - 两个不同的 View 具有不同的数据库排序顺序(default_scope)

ruby-on-rails - Ruby/Rails ActiveRecord 属性查找 bool 值

c# - 使用异步套接字客户端进行原始 HTTP 解析