建立一个专门的Rails生产服务器

4
我需要为Rails应用程序设置专用服务器。我不确定最佳方法是什么。我需要一个可以随着许多用户在网站上注册而扩展的解决方案。我想这将是一个中等规模的应用程序。
以下是更具体的问题:
- 操作系统可能是ubuntu 10. 应该选择ubuntu 10.04还是10.10? - 我应该使用sudo安装ruby和所有宝石,或者应该使用rvm?如果rvm安装没有成本,那么我认为这将是首选,因为它具有更大的灵活性,但是在生产服务器上使用rvm是一个好的解决方案吗?我真的不知道 - 我应该使用nginx/unicorn,还是nginx/passenger,还是apache/passenger,还是其他东西? - 我需要一个可扩展的数据库,所以Postgres可能比MySQL更好。或者我应该使用其他东西,或者在这里更改我的首选项?
一个相关的问题,虽然与此帖子无关:我通常使用sudo全局安装一个ruby,并安装诸如libssl之类的软件包,然后使用rvm安装其他ruby而不使用sudo。这是正确的方法吗,还是我可以直接使用rvm安装所有我需要的rubies而不需要全局安装一个?

5
除非你提供更多关于你正在部署的应用程序类型的上下文,否则所有这些问题的答案都是“当然”。这就像说“我需要一辆车,我应该买哪种车?”一样泛泛而谈。 - tadman
1
一定要使用 rvm。据我所知,Ubuntu 的 ruby 包已经被弃用了(它们曾经安装一个非常老旧的版本)。Rvm 可以让你在系统范围和单用户范围内进行安装选择。但正如 @tadman 所说,你应该更具体地说明你的需求,你的应用程序预计承受什么样的负载,它的目的是什么等等。 - m_x
@tadman和m_x:对于中型应用程序。实际上,如果使用Ubuntu版本或CentOS版本并不是很重要,更重要的问题是是否应该使用sudo来安装rvm,还是不用sudo,或者直接使用没有rvm的ruby。另外,Rails社区中nginx比apache更受欢迎吗?还是相反?为什么? - umar
我认为在root用户下使用rvm是可以的,而且我从来没有遇到过任何问题。相比你所使用的任何发行版,rvm会更好地安装正确版本的Ruby并进行修补。 - tadman
尽可能少使用root权限。当然,您的应用程序绝对不应该以root身份运行。 - Marnen Laibow-Koser
4个回答

6

我上个星期也遇到了同样的问题,我的解决方案是跟随Railscasts #335 部署到 VPS

Ryan Bates指导你如何通过VPS进行部署,虽然我已经成功地在家里搭了一台专用服务器来学习部署过程。

他使用了以下设置:

  • Ubuntu (10.04 LTS)
  • nginx (1.0.14)
  • Unicorn (4.2.0)
  • PostgreSQL (9.1.3)
  • Postfix
  • rbenv
  • rbenv-installer
  • Capistrano

个人而言,我更适合MySQL,所以我很容易将其替换为PostgreSQL。我还使用了Ubuntu 12.04。

诚然,我支付了5美元的订阅费。但坦白说,部署的棘手部分在其他教程中也有更详细的覆盖。他会给你源代码,并向你介绍其他方面的好工具(例如rbenv-installer)。这还让我使用rbenv代替之前使用的RVM,到目前为止我没有遇到任何问题。

然而,我遇到了一个问题,需要一些外部输入,就是unicorn的问题,但是这篇文章和关于Capistrano的Railscast帮助我解决了问题。

祝好运。


感谢 @Marius Butuc 进行语法检查。 - DazBaldwin

4
  • 使用RVM。请参阅http://beginrescueend.com/integration/passenger/

  • 我会使用Nginx和Passenger -- Passenger非常容易设置,而Nginx则轻巧好用。

  • 在几乎所有方面,Postgres都比MySQL好得多。是个不错的选择。


根据我的经验,这并不完全正确。我广泛使用了两者(事实上,在进行了多年相当高级的MySQL工作后,我转向了PostgreSQL)。Postgres稍微难以设置,但是它会在之后的使用中多次回报您的初始投资。我没有错过任何MySQL管理工具。你具体想到了什么? - Marnen Laibow-Koser
Postgres的模式实际上是非常好的功能,尽管我不知道如何在Rails中使用它们。我很少使用PGAdmin(Postgres有其他图形化工具),但无论如何,你不应该基于图形客户端来选择数据库服务器。听起来你可能不太了解如何有效地使用Postgres... - Marnen Laibow-Koser
这并不是不知道如何有效使用它,而是还有更多需要学习的内容。对于初级开发人员来说,如果他们不够精明,可能会搞砸它。因此,“MySQL 对于开发人员来说显然更容易使用”。Postgres 更好,但更好的东西是要付出代价的。 - tadman
公平地说,“开发人员”和合适的DBA之间有区别,但你说得对。 - tadman
当然。我是一名开发人员。我绝对不是真正的数据库管理员。我在这里说的一切都是从开发人员的角度出发的。 - Marnen Laibow-Koser
显示剩余3条评论

1
如果只是因为Passenger仍然没有提供滚动重启,我会选择Unicorn。
这意味着每次部署时,所有实例都会同时关闭,然后重新启动。您不会丢失任何请求,但可能会导致页面加载时间长达10-20秒,对于在您部署时访问您的服务器的任何人来说。

0

你的帖子包含多个问题,让我逐一回答。

RVM

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

优点:

  • 可以轻松拥有与开发机器相同的环境
  • 更大的灵活性,可以使用不同版本的Ruby和Gem

缺点:

  • 定时任务或shell脚本可能需要更多关注(请参见here)。但是,我没有遇到任何大问题

也许您可以详细说明一下您听说过的问题?

操作系统

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

Web服务器、数据库

根据您提供的少量信息很难确定。您列出的选项都有其优缺点,但我不确定它们是否在项目的这个阶段真的很重要。

我建议选择你最熟悉的技术。(如果你对这些技术都不熟悉,那就选择Apache/Passenger和MySQL。)等到你有了成千上万的用户之后,你总是可以进行切换。只是不要在优化架构方面投入太多精力。先把东西跑起来!

具体来说,RVM非常适合开发,但是我听说(并且已经遇到)在生产环境中尝试运行RVM时会遇到一些问题,因为它太过前沿,所以可能会有错误。由于RVM完全是关于修改shell变量的,所以你将更难尝试加载Ruby和gems(即使使用bundler),而passenger只允许你运行一个Ruby版本,并且不支持RVM,因此你必须创建特殊的加载脚本告诉passenger通过RVM加载gems。 - Andrew
我听说 rbenv 更适合用于生产环境,因为它不会修改你的 shell(但在开发中使用不太方便)。 - Andrew
1
实际上,我成功地安装了Passenger和RVM,而且没有使用任何特殊的加载脚本。你有没有查看过http://everydayrails.com/2011/01/25/passenger-3-rvm.html这个链接? - claasz
@Andrew RVM不是最前沿的技术。它是稳定的,并且已经存在并得到支持多年了。我在我的服务器上使用它与Passenger一起使用多年,直到2周前都没有出现任何问题。 - Marnen Laibow-Koser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接