【问题标题】:Rails: What is the use of web servers (Apache / nginx / passenger)?Rails:Web 服务器(Apache/nginx/passenger)有什么用?
【发布时间】:2013-01-06 21:58:04
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

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

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

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

    当您在开发机器上构建应用程序时,您可能遇到过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 等),然后由 Rails 服务器完成所需的工作并将响应发送给 Apache/nginx,后者将其发回给客户。

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

    希望有帮助!

    【讨论】:

    • 谢谢。我第一次读到有关Passenger/Unicorn 做“服务器工作的rails 端”和Nginx/Apache 做文件发送的文章。到目前为止,我一直对 Nginx 是否与Passenger 等相同以及为什么在生产环境中需要两个不同的服务器组件感到困惑。
    【解决方案2】:

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

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

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

    Passenger Phusion 是一个应用服务器,它与 rails 一起帮助管理和自动化代码部署。

    【讨论】:

      【解决方案3】:

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

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-05-31
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多