2012-04-15 101 views
1

我有一个在Heroku中托管的Rails 3.0应用程序。我想建立一个不同的Rails的服务器来运行重后端作业(扫描用户配置文件,项目和创建的建议,并将它们存储在Redis的数据库),使其:在Heroku上为Rails应用程序设置后端服务器

  • 不会堵塞我的前末端服务器(即,如果我同一个前端Rails的服务器上运行的后端进程,这将需要更长的时间来响应用户的请求等)
  • 让我有Rails的类和方法

我的理解是:

  • 添加更多工人代理将不会分离前端和后端进程
  • 添加When或Delayed_Job gems将不允许我在单独的后端服务器上运行。

我认为这种情况应该定期为Rails出现。我应该怎么做呢?

非常感谢。

回答

1
  • “clog”“前端数据库”是什么意思?你可能只是有一个常规的数据库,你应该实施缓存和周到的查询,以避免征税。使用Resis和Redis进行任务以避免向SQL数据库添加负载。
  • 通过加载环境,您可以在rake任务中访问“Rails类和方法”。例如:task :do_this => :environment { ... }
  • 每个dyno独立于其他dyno,无论它们是Web工作者(可用于HTTP请求)还是工作者dynos(对于其他任何东西)。

您确实只需要创建rake任务并将任何其他服务(如Clockwork)添加到您的Procfile(仅限Cedar堆栈)以使其全部在Heroku上运行。

+0

非常感谢!其实我的意思是“堵塞我的前端服务器”。我的意思是:如果我需要在相同的Rails前端服务器上运行大量的工作,比如索引,匹配对象,它会减慢我的前端服务器。这就是为什么我想建立一个独立的后端服务器的原因。在这里添加一个worker dynos将无济于事,因为如果计划的索引作业运行,它可能会占用所有的dynos。现在,对于我的后端服务器,我想要访问所有的Rails功能(即,我应该能够从ActiveRecord等继承) – AdamNYC 2012-04-15 22:18:23

+0

工作人员在单独的进程中运行dynos - 因此它们不会影响前端。然而,你必须考虑你的数据库,就好像这两个应用程序共享那么这可能是你的瓶颈。 – 2012-04-16 08:21:11

+0

你不了解Heroku的工作方式。单个进程不会运行多个dynos。无论上下文还是任务,dyno都会运行应用程序的单个实例。处理HTTP请求是像Sinatra和Rails这样的框架处理的一项任务,但您也可以在通过'heroku run ...'触发的单独的dynos中运行一次性Ruby脚本。 Heroku没有服务器的概念 - 他们甚至不用硬件,因为他们自己在AWS上运行。 – coreyward 2012-04-16 20:54:10

相关问题