【问题标题】:Set up a dedicated rails production server [closed]设置专用的 Rails 生产服务器 [关闭]
【发布时间】:2011-11-03 15:02:01
【问题描述】:

我需要为 Rails 应用程序设置专用服务器。我不确定什么是最好的方法。我需要一个可以随着大量用户在网站上注册而扩展的解决方案。我猜这将是一个中等规模的应用程序。

这里有更具体的问题:

  • 操作系统可能是 ubuntu 10。我应该选择 ubuntu 10.04 还是 10.10?
  • 我应该使用 sudo 安装 ruby​​ 以及应用程序的所有 gem,还是应该使用 rvm?如果 rvm 安装没有成本,我认为这将是首选,因为它具有更大的灵活性,但使用 rvm 是否是生产服务器的良好解决方案?我真的不知道这个
  • 我应该使用 nginx/unicorn,还是 nginx/passenger,还是 apache/passenger,还是别的什么?
  • 我需要一个可扩展的数据库,所以 postgres 可能会比 mysql 更好。还是我应该选择其他东西,或者在这里改变我的偏好?

一个相关的问题,虽然与这篇文章没有直接关系:我通常总是使用 sudo 在系统范围内安装一个 ruby​​,然后安装 libssl 之类的软件包,然后使用 rvm 安装其他软件包,而不使用 sudo。这是正确的方法吗,还是我可以直接使用 rvm 安装我需要的所有 rubies,而无需在系统范围内安装一个?

【问题讨论】:

  • 所有这些问题的答案都是“确定的”,除非您可以提供有关您正在部署的应用程序类型的更多上下文。这就像“我需要一辆车,我应该买什么车?”一样笼统
  • 绝对使用 rvm。我上次检查时不推荐使用 ruby​​ 的 Ubuntu 软件包(它们曾经安装 ooooooold 版本的 ruby​​)。 Rvm 允许您在系统范围和仅限一个用户的安装之间进行选择。但正如@tadman 所说,您确实应该更具体地了解您的需求、您希望您的应用能够承受什么样的负载、它的用途是什么等。
  • @tadman 和 m_x:用于中等规模的应用程序。实际上 ubuntu 版本,或者如果我们使用 taht 的 centos 版本并不重要,更重要的问题是 rvm 是否应该与 sudo 一起使用,或者没有,或者我应该使用没有 rvm 的 ruby​​。然后,在 Rails 社区中,nginx 是否比 apache 更受欢迎,反之亦然。为什么?
  • 我认为使用 rvm 作为 root 很好,并且没有任何问题。 rvm 在安装正确版本的 Ruby 并对其进行修补方面会比您使用的任何发行版做得更好。
  • 尽量少用root。当然,您的应用程序绝对不应以 root 身份运行。

标签: ruby-on-rails ruby stack production


【解决方案1】:

上周我也陷入了同样的困境,我采取的解决方案是关注Railscasts #335 Deploying to a VPS

Ryan Bates 将引导您完成部署到 VPS 的棘手步骤,不过,我已经部署到我在家中设置的专用服务器以了解部署过程。

他使用以下设置:

  • Ubuntu (10.04 LTS)
  • nginx (1.0.14)
  • 独角兽(4.2.0)
  • PostgreSQL (9.1.3)
  • 后缀
  • rbenv
  • rbenv 安装程序
  • 卡皮斯特拉诺

就个人而言,我更适合 MySQL 并且很容易使用它来代替 PostgreSQL。我还使用了 Ubuntu 12.04。

诚然,我确实支付了 5 美元的订阅费。但老实说,其他教程也更深入地介绍了部署中更棘手的部分。他会为您提供源代码并在其他方面为您提供线索,例如好的工具(例如 rbenv-installer)。
这也让我使用了 rbenv 而不是我以前使用的 RVM,到目前为止我没有遇到任何问题。

我确实遇到了一件事情,并且不得不找到一些外部输入是独角兽,但 this post 以及 Capistrano 上的 Railscast 帮助我完成了它。

祝你好运

【讨论】:

  • 为语法检查干杯@Marius Butuc
【解决方案2】:

【讨论】:

  • MySQL 对开发人员来说更容易使用,并且它有更多的工具可用于管理。尽管 Postgres 可以说是一个更好的数据库平台,但它需要开发人员投入更多的时间来学习和管理。
  • 根据我的经验并不是特别正确。我已经广泛使用了这两种方法(事实上,经过多年相当高级的 MySQL 工作后,我转向了 PostgreSQL)。 Postgres 设置起来稍微困难一些,但可以多次偿还初始投资。我没有错过任何 MySQL 管理工具。你具体在想什么?
  • 我最大的不满是 PGAdmin 在任何平台上都是一个对用户非常不友好的应用程序,而且 Postres 模式环境过于复杂,这让不太成熟的开发人员感到困惑。 MySQL 在大多数情况下只有数据库和表,而 Postgres 有许多其他层,在大多数情况下是无关紧要的。虽然这为开发人员提供了更多的控制权,但它确实需要额外的学习才能有效地使用。
  • Postgres 的模式实际上是一个不错的选择,尽管我不知道在 Rails 中使用它们的好方法。我发现自己根本不怎么使用 PGAdmin(还有 其他用于 Postgres 的图形工具),但无论如何,您不应该选择基于图形客户端的数据库服务器。在我看来,您可能不了解如何有效地使用 Postgres...
  • 这不是不知道如何有效使用它的情况,而是还有更多需要学习的东西,对于初级开发人员来说,如果他们不那么精明,他们可能会把它弄得一团糟。因此,“MySQL 对开发人员来说更容易使用”。 Postgres 更好,但更好是有代价的。
【解决方案3】:

我会选择独角兽而不是乘客,如果只是因为乘客仍然不提供滚动重启。

这意味着每次部署时,所有实例都会同时关闭,然后重新启动。您不会放弃任何请求,但在部署时访问您服务器的任何人都可能需要 10-20 秒的页面加载时间。

【讨论】:

    【解决方案4】:

    您的帖子包含多个问题,所以让我一一解决。

    RVM

    我确实使用 RVM 在生产环境中运行 Rails 应用程序(标准设置,而不是根目录)。到目前为止,我还没有遇到任何问题。

    专业:

    • 很容易拥有与您的开发机器上相同的环境
    • Ruby 和 Gem 版本更灵活

    缺点:

    • Cron 作业或 shell 脚本可能需要更多注意(请参阅 here)。但是,我对此没有任何大问题

    也许您可以提供更多关于您听说过的问题的详细信息?

    操作系统

    正如其他人已经指出的那样,这并不重要。就个人而言,我更喜欢用于服务器的 Ubuntu LTS 版本。最新的是 Ubuntu 12.04 LTS,所以我会选择那个。

    Web 服务器、数据库

    根据您提供的少量信息,这真的很难说。您列出的选项各有利弊,但我不确定它们在项目的这个阶段对您是否真的很重要。

    我建议选择您最熟悉的技术。 (如果您不熟悉这些,请选择 Apache/Passenger 和 MySQL。)稍后当您拥有数千名用户时,您可以随时切换。只是不要在事先优化架构上投入太多精力。启动并运行一些东西!

    【讨论】:

    • 详细说明,RVM 非常适合开发,但我听说(并且已经遇到)在生产环境中尝试运行 RVM 的一些问题是它过于前沿,因此可能存在错误,因为 RVM 是关于修改 shell 变量的,你将很难尝试加载 Ruby 和 gems(即使使用捆绑器),并且乘客只允许你运行一个 Ruby 版本并且不能很好地与 RVM 一起使用,所以你必须创建特殊的加载脚本告诉乘客通过 RVM 加载宝石。
    • 我听说 rbenv 更适合生产环境,因为它不会修改你的 shell(但在开发中不那么容易使用)。
    • 实际上我设法在没有任何特殊加载脚本的情况下将Passenger 与RVM 一起安装。你检查过everydayrails.com/2011/01/25/passenger-3-rvm.html吗?
    • @Andrew RVM 并不是最前沿的。它很稳定,多年来一直存在并得到很好的支持。多年来,我一直在我的服务器上将它与Passenger一起使用,直到两周前都没有出现任何问题。
    猜你喜欢
    • 2021-06-11
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2012-01-13
    • 2016-10-19
    • 1970-01-01
    • 2013-08-15
    • 2015-12-26
    相关资源
    最近更新 更多