Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:我可以在不同的服务器上运行后台作业吗?_Ruby On Rails_Ruby On Rails 3_Delayed Job_Beanstalkd - Fatal编程技术网

Ruby on rails Rails:我可以在不同的服务器上运行后台作业吗?

Ruby on rails Rails:我可以在不同的服务器上运行后台作业吗?,ruby-on-rails,ruby-on-rails-3,delayed-job,beanstalkd,Ruby On Rails,Ruby On Rails 3,Delayed Job,Beanstalkd,是否可以在一台服务器上托管应用程序,并在另一台服务器上对作业进行排队 可能的例子: 两个不同的EC2实例,一个使用主服务器,另一个使用排队服务 在Heroku中托管应用程序,并将EC2实例与排队服务一起使用 可能吗 谢谢当然可以。我们在我工作的地方推迟了工作安排 要使其正常工作,有几个要求: 服务器必须有同步时钟。只要服务器时区都设置为相同,这通常不是问题 所有服务器都必须访问同一个数据库 要做到这一点,您只需在两台(或全部,如果超过两台)服务器上都有相同的应用程序,并在您想要处理作业的任何服务

是否可以在一台服务器上托管应用程序,并在另一台服务器上对作业进行排队

可能的例子:

  • 两个不同的EC2实例,一个使用主服务器,另一个使用排队服务

  • 在Heroku中托管应用程序,并将EC2实例与排队服务一起使用

  • 可能吗


    谢谢

    当然可以。我们在我工作的地方推迟了工作安排

    要使其正常工作,有几个要求:

  • 服务器必须有同步时钟。只要服务器时区都设置为相同,这通常不是问题
  • 所有服务器都必须访问同一个数据库
  • 要做到这一点,您只需在两台(或全部,如果超过两台)服务器上都有相同的应用程序,并在您想要处理作业的任何服务器上启动工作程序。任何一台服务器都可以对作业进行排队,但只有工作人员正在运行的服务器才能实际处理作业

    例如,我们有一个
    接口
    服务器、一个
    db
    服务器和几个
    工作者
    服务器。
    接口
    服务器通过Apache/Passenger为应用程序提供服务,将Rails应用程序连接到
    db
    服务器。
    workers
    拥有相同的应用程序,尽管Apache没有运行,您无法通过http访问该应用程序。另一方面,他们确实拖延了工人们的工作。在一个常见场景中,
    接口
    服务器在
    数据库
    中对作业进行排队,而
    工作者
    服务器处理这些作业


    警告一句:如果您依赖于应用程序中的物理文件(附件、日志文件、下载的XML或其他文件),那么您很可能需要像S3这样的解决方案来保存这些文件。这是因为各个服务器可能没有实际的文件。例如,如果您的用户要在面向web的服务器上上载其个人资料图片,则文件可能存储在该服务器上。如果您有另一台服务器来调整配置文件图片的大小,那么该映像将不存在于辅助服务器上。

    只是为了提供另一个可行的选择:您可以使用一个新的辅助服务器服务,它完全依赖于EC2内的一个弹性云服务器场

    通过这种方式,您可以对要运行的作业进行排队/调度,它们将在跨越多个服务器的大量线程之间并行化,而无需担心基础设施

    不过,对数据库的处理也是一样的——它需要从外部进行访问


    完整披露:我帮助构建。

    感谢您的回复。我现在了解了如何使用自己的服务器来实现这一点。使用Heroku+My server有没有办法做到这一点?这实际上取决于Heroku是否允许从外部服务器直接访问其数据库。我认为他们不会,所以答案是“不会”。那么
    挂载如何?这不是一个可靠的解决方案吗?在不同的服务器上运行后台作业的主要原因是为了保留CPU和内存。使用挂载并不能真正做到这一点。