嗨,我在过去的半年里一直在学习 rails,并且在 Heroku 上安装了一些应用程序。所以对我来说,我认为将应用程序部署到万维网上就像heroku push
. 然而,我刚刚在 Rails 上获得了第一份实习机会,而我的一位前辈正在谈论 Apache 和 Nginx,我不确定它们如何适应这种情况,因为我认为应用程序仅由 Rails + 云应用程序平台组成。我已经查过了,但我仍然不知道它如何以及在何处影响我的应用程序生命周期。有人可以解释使用网络服务器的内容/地点/时间吗?
3 回答
所以你已经有了 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
操作,将代码发送到服务器,并确保它们已启动并运行准备好响应用户请求。
希望有帮助!
网页需要 Web 服务器才能在 Internet 上可用。
因此,一个全是静态内容(全都是 .html 页面)的站点只需要一个 Web 服务器,这就是 Apace、nginx 等的用武之地。它们是 Web 服务器。
当您使用像 rails 这样的框架时,会添加一个附加组件,即应用程序服务器。这使用 rails 框架对页面进行预处理,然后(仍然)使用上述 Web 服务器使最终页面(当然是 .html)通过浏览器提供给最终用户。
Passenger Phusion 是一个应用程序服务器,使用 rails 将有助于管理和自动化代码的部署。
Heroku 是一项云服务,这意味着他们负责硬件和软件,让您可以无缝地发布您的应用程序,而不必担心幕后发生的事情。所以你唯一需要做的就是将你的代码推送到他们的 Git 上,瞧。
另一方面,Rails 也可以部署在您完全从零开始构建的系统上,您不仅要负责应用程序的开发,还要负责服务器的维护和硬件和/或软件的选择。然后,您可以在几个能够运行 rails 的应用程序服务器之间进行选择,例如 ngix。
希望有帮助。