【问题标题】:Set up backend server for Rails app on Heroku在 Heroku 上为 Rails 应用程序设置后端服务器
【发布时间】:2012-04-16 06:31:12
【问题描述】:

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

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

我的理解是:

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

我认为 Rails 应该经常出现这种情况。我该怎么办?

非常感谢。

【问题讨论】:

    标签: ruby-on-rails heroku backend


    【解决方案1】:
    • “阻塞”“前端数据库”是什么意思?你可能只有一个普通的数据库,你应该实现缓存和深思熟虑的查询以避免对它征税。将 Resque 与 Redis 一起用于任务以避免增加 SQL 数据库的负载。
    • 您可以通过加载环境来访问 rake 任务中的“Rails 类和方法”。例如:task :do_this => :environment { ... }
    • 每个 dyno 都独立于其他每个 dyno,无论它们是 Web Worker(可用于 HTTP 请求)还是 worker dyno(用于其他任何东西)。

    您真的只需要创建 rake 任务并将任何其他服务(如 Clockwork)添加到您的 Procfile(仅限 Cedar 堆栈)即可让这一切在 Heroku 上运行。

    【讨论】:

    • 非常感谢!我实际上的意思是“阻塞我的前端服务器”。我的意思是:如果我需要在同一个 Rails 前端服务器上运行繁重的工作,例如索引、匹配对象,它会降低我的前端服务器的速度。这就是我想建立一个独立的后端服务器的原因。添加工作测功机在这里没有帮助,因为如果计划的索引作业运行,它可能会接管所有测功机。现在,对于我的后端服务器,我想访问所有 Rails 功能(即,我应该能够从 ActiveRecord 等继承)
    • workers 在单独的进程中运行到 dynos - 所以他们不会影响前端。但是,您必须将数据库视为在两个应用程序之间共享,那么这可能是您的瓶颈。
    • 您不了解 Heroku 的工作方式。单个进程不会跨多个测功机运行。无论上下文或任务如何,测功机都会运行您的应用程序的单个实例。处理 HTTP 请求是 Sinatra 和 Rails 等框架处理的一项任务,但您也可以在通过 heroku run ... 触发的单独 dyno 中运行一次性 Ruby 脚本。 Heroku 没有服务器的概念——它们甚至不使用硬件,因为它们本身运行在 AWS 之上。
    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多