ruby-on-rails - 回滚 : multiple calls in a row to the same long-time-response controller

标签 ruby-on-rails heroku concurrency engineyard

更新:

如果您有同样的问题,请先阅读“Indicate to an ajax process that the delayed job has completed”。谢谢 Gene .

我有并发问题。我有一个 Controller 抓取几个网站,但每次调用我的 Controller 都需要大约 4-5 秒来响应。

因此,如果我连续调用 2 次(或更多)次,则第二次调用需要在开始之前等待第一次调用。

那么如何在我的 Controller 中解决这个问题呢?也许像 EventMachine 这样的东西?

更新 & 示例 :

application_controller.rb


def func1
    i=0
    while i<=2
        puts "func1 at: #{Time.now}"
        sleep(2)
        i=i+1
    end
end

def func2
    j=0
    while j<=2
        puts "func2 at: #{Time.now}"
        sleep(1)
        j=j+1
    end
end

whatever_controller.rb


puts ">>>>>>>> Started At #{Time.now}"
  func1()
  func2()
puts "End at #{Time.now}"

所以现在我需要请求 http://myawesome.app/whatever从同一用户/浏览器/等同时多次。

我用 Unicorn 尝试了 Heroku(和本地),但没有成功,这是我的设置:
  • unicorn .rb http://pastebin.com/QL0wdGx0
  • 文件 http://pastebin.com/RrTtNWJZ
  • Heroku 设置 https://www.dropbox.com/s/wxwr5v4p61524tv/Screenshot%202014-02-20%2010.33.16.png

  • 要求:
  • 我需要一个 RESTful 解决方案。这是 API,所以我需要响应 JSON

  • 更多信息:
    我现在有 2 个云服务器正在运行。
  • Heroku 与 unicorn
  • Engineyard Cloud 与 Nginx + Panssenger
  • 最佳答案

    您可能在开发模式下使用 webrick。 Webrick 一次只处理一个请求。

    您有几种解决方案,存在许多可以处理并发的 ruby​​ Web 服务器。

    这里有几个。

    薄的

    Thin 最初基于 mongrel,使用 eventmachine 来处理多个并发连接。

    unicorn

    Unicorn 使用一个主进程将请求分派(dispatch)给网络 worker ,4 个 worker 等于 4 个并发可能的请求。

    彪马

    Puma 是一个相对较新的 ruby​​ 服务器,它的亮点是它在线程中处理并发请求,确保你的代码是线程安全的!

    乘客

    passenger 是一个捆绑在 nginx 或 apache 中的 ruby​​ 服务器,非常适合生产和开发

    其他

    这些是一些替代品,还有很多其他的,但我认为它们是当今最常用的。

    要使用所有这些服务器,请查看它们的说明。它们通常可以在他们的 github README 上找到。

    关于ruby-on-rails - 回滚 : multiple calls in a row to the same long-time-response controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864536/

    相关文章:

    java - 部署在 Heroku 上的 Spring Boot 应用程序仍然崩溃

    Java 线程看不到共享的 boolean 值更改

    ruby-on-rails - 设计不使用自定义邮件 View

    ruby-on-rails - 如何在postgres中恢复my_backup.tar?

    ruby-on-rails - 表单未通过 Mechanize 提交

    ruby-on-rails - Heroku: Errno::ECONNREFUSED (连接被拒绝 - connect(2)):

    ruby-on-rails - 用户在 Rails 中选择的 CSS 样式表

    node.js - 如何在本地测试在 Heroku 中运行的 node.js + mongodb 应用程序?

    java - LongAdder 如何比 AtomicLong 表现更好

    algorithm - 线程 I/O 重新排序缓冲区的标准术语?