13

嗨,我在过去的半年里一直在学习 rails,并且在 Heroku 上安装了一些应用程序。所以对我来说,我认为将应用程序部署到万维网上就像heroku push. 然而,我刚刚在 Rails 上获得了第一份实习机会,而我的一位前辈正在谈论 Apache 和 Nginx,我不确定它们如何适应这种情况,因为我认为应用程序仅由 Rails + 云应用程序平台组成。我已经查过了,但我仍然不知道它如何以及在何处影响我的应用程序生命周期。有人可以解释使用网络服务器的内容/地点/时间吗?

4

3 回答 3

24

所以你已经有了 Rails 应用程序,并且你知道你有控制器、动作和视图等等。

当用户在浏览器中访问您在 Heroku 上的应用时,他们会输入指向 Heroku 服务器的 URL。

Heroku 服务器是 Web 服务器,它监听用户输入 URL 并将他们连接到 Rails 应用程序。rails 应用程序会做它的事情(获取博客文章列表或其他内容),然后服务器将此信息发送回用户的浏览器。

您一直在使用 Web 服务器,只是由于 Heroku,它被从您身上抽象出来并变得超级简单。

所以生命周期有点像这样:

当您在开发机器上构建应用程序时,您可能遇到过 command rails server。这将启动一个名为 WEBrick 的程序,它是一个 Web 服务器,并在端口 3000 上进行侦听。您可以通过http://localhost:3000.

WEBrick 监听 3000 端口并响应用户的请求,例如“嘿,给我一个帖子列表”命令。

当您将代码推送到生产环境时(根据您的经验,通过heroku push),您将代码发送给一个提供者,该提供者rails server为您处理生产等价物。

生产设置(您的高级开发人员正在谈论)比您rails server在开发机器上的本地设置要复杂一些。

在生产环境中,你有你的 Rails 服务器(通常是 Unicorn、Passenger)来代替 WEBrick。

在许多生产设置中,还使用另一个服务器,例如 Apache 或 nginx,并且是用户在访问您的应用程序时连接到的服务器。

该服务器通常作为一个路由器存在,用于确定应如何处理不同类型的请求。例如,对存储在服务器上的静态文件(css、图像、javascript 等)的请求可能只由 Apache 或 nginx 直接处理,因为它在将静态资产发送回客户端方面做得非常出色(而且速度很快)。

其他请求,例如“给我一个所有博客文章的列表”被传递到 Rails 服务器(Unicorn、Passenger 等),后者依次完成所需的工作并将响应发送给 Apache/nginx,后者将其发送回客户端.

Heroku 在一个易于使用的软件包中为您完成了所有这些工作,但听起来您工作的地方自己管理这一切,而不是使用 Heroku。他们已经设置了自己的一组 Web 服务器,并且会以自己的方式执行等效的heroku push操作,将代码发送到服务器,并确保它们已启动并运行准备好响应用户请求。

希望有帮助!

于 2013-01-06T22:32:27.747 回答
5

网页需要 Web 服务器才能在 Internet 上可用。

因此,一个全是静态内容(全都是 .html 页面)的站点只需要一个 Web 服务器,这就是 Apace、nginx 等的用武之地。它们是 Web 服务器。

当您使用像 rails 这样的框架时,会添加一个附加组件,即应用程序服务器。这使用 rails 框架对页面进行预处理,然后(仍然)使用上述 Web 服务器使最终页面(当然是 .html)通过浏览器提供给最终用户。

Passenger Phusion 是一个应用程序服务器,使用 rails 将有助于管理和自动化代码的部署。

于 2013-01-06T22:21:15.650 回答
1

Heroku 是一项云服务,这意味着他们负责硬件和软件,让您可以无缝地发布您的应用程序,而不必担心幕后发生的事情。所以你唯一需要做的就是将你的代码推送到他们的 Git 上,瞧。

另一方面,Rails 也可以部署在您完全从零开始构建的系统上,您不仅要负责应用程序的开发,还要负责服务器的维护和硬件和/或软件的选择。然后,您可以在几个能够运行 rails 的应用程序服务器之间进行选择,例如 ngix。

希望有帮助。

于 2013-01-06T22:12:01.867 回答