首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让异步http请求在rails 3beta4/ruby 1.9.2-rc2/thin/eventmachine上工作

在Rails 3beta4/Ruby 1.9.2-rc2/Thin/EventMachine上让异步HTTP请求工作的方法是使用EventMachine库和Thin服务器来处理异步请求。以下是详细的步骤:

  1. 首先,确保你的Rails项目中已经安装了EventMachine和Thin的gem包。可以在Gemfile中添加以下行来安装它们:
代码语言:ruby
复制
gem 'eventmachine'
gem 'thin'

然后运行bundle install来安装这些gem包。

  1. 在Rails项目的配置文件config/application.rb中,添加以下代码来启用EventMachine和Thin:
代码语言:ruby
复制
require 'eventmachine'

module YourAppName
  class Application < Rails::Application
    # ...

    # Use Thin as the server
    config.middleware.use Rack::ContentLength
    config.middleware.use Rack::Deflater
    config.middleware.use Rack::Chunked

    config.middleware.delete Rack::Lock
    config.middleware.delete ActionDispatch::Flash
    config.middleware.delete ActionDispatch::Cookies
    config.middleware.delete ActionDispatch::Session::CookieStore

    config.middleware.use Rack::Session::Pool
    config.middleware.use Rack::MethodOverride
    config.middleware.use Rack::Head
    config.middleware.use Rack::ConditionalGet
    config.middleware.use Rack::ETag

    config.middleware.use Rack::ContentLength
    config.middleware.use Rack::Deflater
    config.middleware.use Rack::Chunked

    config.middleware.use Rack::ShowExceptions
    config.middleware.use Rack::Lint
    config.middleware.use Rack::NullLogger

    config.middleware.use Rack::Static, urls: ['/assets'], root: 'public'

    # ...
  end
end

这段代码将配置Rails应用程序使用Thin作为服务器,并删除一些中间件以确保EventMachine和Thin能够正常工作。

  1. 在你的Rails项目中创建一个新的文件config/thin.yml,并添加以下内容:
代码语言:yaml
复制
---
chdir: /path/to/your/rails/app
environment: production
address: 0.0.0.0
port: 3000
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 512
require: []
wait: 30
servers: 1
threaded: true
no-epoll: true
daemonize: true

/path/to/your/rails/app替换为你的Rails应用程序的实际路径。

  1. 在终端中,使用以下命令来启动Thin服务器:
代码语言:bash
复制
thin -C config/thin.yml start

这将启动Thin服务器,并将其配置为监听在指定的地址和端口上。

  1. 现在,你可以在Rails应用程序中使用EventMachine来处理异步HTTP请求。例如,你可以在控制器中创建一个异步动作:
代码语言:ruby
复制
class YourController < ApplicationController
  def your_action
    EventMachine.defer(proc {
      # 在这里执行异步操作,例如发送HTTP请求
      response = EventMachine::HttpRequest.new('http://example.com').get

      # 处理响应数据
      if response.response_header.status == 200
        # 处理成功响应
        result = response.response
      else
        # 处理错误响应
        result = nil
      end

      result
    }, proc { |result|
      # 异步操作完成后的回调函数
      if result
        # 处理成功结果
        render json: result
      else
        # 处理错误结果
        render json: { error: 'Something went wrong' }, status: :internal_server_error
      end
    })
  end
end

在上面的代码中,我们使用EventMachine.defer方法来执行异步操作。在proc块中,我们发送了一个HTTP请求,并在回调函数中处理响应数据。最后,我们根据结果渲染不同的响应。

这样,你就可以在Rails 3beta4/Ruby 1.9.2-rc2/Thin/EventMachine上实现异步HTTP请求的工作了。

请注意,以上答案中没有提及任何腾讯云相关产品和产品介绍链接地址,因为要求答案中不能提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的一些云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

云原生应用的12要素

例如,Python 的 Tornado, RubyThin , Java 以及其他基于 JVM 语言的 Jetty。完全由 用户端 ,确切的说应该是应用的代码,发起请求。...开发人员可以运用这个模型去设计应用架构,将不同的工作分配给不同的 进程类型 。例如,HTTP 请求可以交给 web 进程来处理,而常驻的后台工作则交由 worker 进程负责。...这并不包括个别较为特殊的进程,例如通过虚拟机的线程处理并发的内部运算,或是使用诸如 EventMachine, Twisted, Node.js 的异步/事件触发模型。...此类型的进程所隐含的要求是HTTP请求大多都很短(不会超过几秒钟),而在长时间轮询中,客户端丢失连接后应该马上尝试重连。 对于 worker 进程来说,优雅终止是指将当前任务退回队列。...例如,如果Ruby的web进程使用了命令 bundle exec thin start ,那么数据库移植应使用 bundle exec rake db:migrate 。

4.3K110
  • 云原生概念

    例如,Python 的 Tornado, RubyThin , Java 以及其他基于 JVM 语言的 Jetty。完全由 用户端 ,确切的说应该是应用的代码,发起请求。...开发人员可以运用这个模型去设计应用架构,将不同的工作分配给不同的 进程类型 。例如,HTTP 请求可以交给 web 进程来处理,而常驻的后台工作则交由 worker 进程负责。...这并不包括个别较为特殊的进程,例如通过虚拟机的线程处理并发的内部运算,或是使用诸如 EventMachine, Twisted, Node.js 的异步/事件触发模型。...此类型的进程所隐含的要求是HTTP请求大多都很短(不会超过几秒钟),而在长时间轮询中,客户端丢失连接后应该马上尝试重连。 对于 worker 进程来说,优雅终止是指将当前任务退回队列。...例如,如果Ruby的web进程使用了命令 bundle exec thin start ,那么数据库移植应使用 bundle exec rake db:migrate 。

    4.3K51

    转--我们为什么选择Golang重构Worker系统

    方案选择 ParseEventMachine,JRuby,c++, c#, golang 之前做了对比,并最终选择了go。...EventMachine Parse使用了EventMachine实现他们的push服务,使用过程中,由于相关的gem成熟度不够,总是碰到一些奇怪的bug。...JRuby Parse现在是Ruby实现,所以JRuby就是正确的选择? JRuby基于rvm可以并发处理大量请求,看起来非常不错。 不是的!JRuby缺乏各种异步库的支持。...本来MRuby上工作很好,效率很高的库,到了JRuby 就不好使了(说白了就是各种库不成熟,生态系统太重要!)...暴漫的worker系统瓶颈高并发峰值,一旦抗不过去后面就会持续累积。 而golang单个任务虽然只有5倍快,但是良好的并发机制,使job的执行速度飞快。

    1.2K50

    用selenium自动化验收测试

    文中还给出了一个例子,以演示如何将 Selenium 应用到现实中使用 Ruby on Rails 和 Ajax 的项目。...这是因为 Ajax 就像它的名称所表明的那样,使用 JavaScript 和异步 HTTP 请求来更新页面内容。每个浏览器实现中与其他浏览器相比有一些小小的不同。...命令提示符下运行 ruby -v,检查您所拥有的版本。对于大多数平台,都可以 http://www.ruby-lang.org/ 找到一个 Ruby 发行版。...查看股票细节用例 查看股票细节用例是查看股票页面上触发的。用户一个公司名称单击鼠标时,就触发了到服务器的一个 Ajax 请求。...由于使用了 Ajax,请求异步发生的。一般的 Web 应用程序中,所有东西通常都是同步的,因此这一点提出了一种不同的挑战。可以像测试其他功能一样来测试 Ajax 功能。

    6.2K30

    如何在CentOS 6.5使用 Nginx+Passenger 部署Railes应用程序

    当然只有一个人可以完成这项工作,但可能不是很好,因为它们并不适合所有目的。 本教程中,我们将使用Phusion Passenger作为应用程序服务器。...应用程序服务器的工作包括包含现代Web应用程序(例如Ruby Rack,Python WSGI等),并充当传入Web请求的辅助入口点。 另一方面,Nginx从一开始就设计为充当多用途HTTP服务器。...注意:本节是我们专门的文章如何在CentOS 6.5安装Ruby 2.1.0的摘要。...Ruby的安装,让我们RVM下载并安装Ruby版本2.1.0: rvm reload rvm install 2.1.0 Ruby之后,我们可以使用RubyGems包管理器来帮助我们获得其他基于Ruby...腾讯云将负责绝大部分处理复杂而耗时的管理工作,如 PostgreSQL 软件安装、存储管理、高可用复制、以及为灾难恢复而进行的数据备份,您更专注于业务程序开发。

    5K20

    如何在CentOS 6.5使用Unicorn和Nginx部署Rails应用程序

    这种真实的部署设置与使用单一开发服务器有很大不同,后者设计用于测试目的,因为由于缺乏功能和特性,它们无法实际网站流量的负载下工作。...本文中,我们选择的应用服务器是Unicorn。Unicorn是一个卓越的应用服务器,它包含你的Rails应用程序来处理传入的请求,最好是它们被前端HTTP服务器(如Nginx)过滤和发送之后。...它功能齐全,但它在设计试图做任何事情而否认它。Unicorn的负责人正在做Web应用服务器需要完成的工作并委派其他职责。 Unicorn的主进程根据您的要求生成workers以满足请求。...准备部署服务器 本节中,我们将执行以下步骤: 更新操作系统 获取必要的基本部署工具 安装RubyRails和库 安装应用程序(即Unicorn)和HTTP服务器(Nginx) 更新和准备操作系统 运行以下命令以更新...://get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh 最后,要在我们的系统完成Ruby的安装,让我们RVM下载并安装Ruby版本2.1.0

    4.1K20

    慢的不是 Ruby,而是你的数据库

    此外,Rails 专注于 Web 开发。虽然你可以 Rails 中处理非 Web 相关的任务,但这毫无意义。Rails 的目标是处理 HTTP 请求 - 响应。...由于 Rails 专注于 Web 开发,并且只处理 HTTP 请求 - 响应,我们将仅从 Web 服务的角度看待 Ruby。...为了深入分析这个问题,我将会比较一些非 Rails、非 HTTP、纯 Ruby 的脚本。 Ruby 处理大量数据方面并不擅长,但从本质讲,这正是 Web 服务所需要的。...其次,典型的 HTTP 循环中,数据需要经过所有这些层和所有这些复杂性,直到请求响应完成。 由于 Ruby 处理数据相对较慢(参见下文),数据传递的代码越多,结果就越慢。...Rails 里到处都是这样的 footgun(footgun,意即伤自己的脚的枪,Rails 称其为“尖刀”。译注:指在一个产品添加一个新东西,容易枪打着自己脚。

    13830

    选择一个异步应用程序服务器还是多阻塞服务器?

    Jonathan Willis,白天是软件开发者,晚上是超级英雄,有人通过TwitterStackOverflow向他提了一个有趣的问题: 许多Rails应用程序或者只一个Vertx Play...我一直和我团队的其他成员讨论关于使用一个异步应用服务器,比如Play! Framework(建立Netty),相比于一个Rails应用程序服务器多实例旋转的优缺点。...我知道Netty是异步/非阻塞的,意味着一个数据区查询操作中,网络请求或者其他一些类似的东西,一个异步调用就将会允许事件循环线程从阻塞请求转换到另一个已准备好的请求去处理/服务。...或者你从来不需要转换,Rails将为你使用用例工作,它极具魅力。并且你一直如此成功地你的客户高兴那么现金就会滚滚而来。 一个单机阻塞服务器方式的缺点: 增加了内存的使用。...使用非阻塞服务器通常可以更小更便宜的机子处理更高负载。 如果你希望请求速率可以保持可接受范围内盒子的数量,并且不希望巨大峰值,那么你就可以使用单线程服务器。

    1.6K80

    使用Capistrano,Nginx和PumaUbuntu 14.04上部署Rails应用程序

    介绍 Rails是一个用Ruby编写的开源Web应用程序框架。Nginx是一种高性能HTTP服务器,反向代理和负载均衡器,以其并发性,稳定性,可伸缩性和低内存消耗而著称。...它通过SSH编写任意工作流脚本,可以将Web应用程序可靠地部署到任意数量的远程计算机,并自动执行预编译和重新启动Rails服务器等常见任务。...本教程中,我们将在Ubuntu安装Ruby和Nginx,并在我们的Web应用程序中配置Puma和Capistrano。...RVM允许您在同一系统轻松安装和管理多个rubies,并根据您的应用使用正确的一个。当您必须升级Rails应用程序以使用更新的ruby时,这会生活变得更加轻松。...这会侦听端口80的流量并将请求传递给您的Puma套接字,将nginx日志写入应用程序的“当前”版本,压缩所有资产并在浏览器中将其缓存到最大到期时间,公共场合提供HTML页面文件夹作为静态文件,并设置默认的最大值

    5K40

    Rails 部署总结

    [Cover] 学 RubyRails 有一段时间了,后面准备也准备把站点换了。不过开始开发之前,我先把 Rails 部署的坑先踩了。...--more--> 准备工作 开始部署之前有些准备工作需要去完成,这些准备工作其实在每次开始新建服务器后你都要去做。 为了安全起见我一般习惯不使用密码登录服务器而是使用 SSH 的方式。...因为不同系统和数据库配置存在差异,所以第一次配置的时候你可以通过服务器新建测试工程来拷贝其中的配置。...请求通过Unix socket 抵达Puma应用服务器。...要访问我们之前创建的Tasks controller,web浏览器里面访问: http://server_public_IP 你会看到和第一次测试时同样的页面,不过现在被架设在了nginx和Puma

    7K50

    如何使用Prometheus监控CentOS 7服务器

    您可以根据需要为自己的工作命名,但将其命名为“node”可以使用Node Exporter的默认控制台模板。 保存文件并退出。 启动Prometheus服务器作为后台进程。 nohup ....输入Prometheus目录: cd ~/Prometheus PromDash是一个Ruby on Rails应用程序,其源文件可在GitHub获得。.../databases/mydb.sqlite3" >> ~/.bashrc 本教程中,您将在生产模式下运行PromDash,因此请将RAILS_ENV环境变量设置为production。...通过键入以下命令将服务器作为守护程序启动: bundle exec thin start -d 等待服务器启动几秒钟,然后访问http://your_server_ip:3000/以查看PromDash...开始创建自定义仪表板之前,您应该PromDash知道您的Prometheus服务器的URL。您可以通过单击顶部的“ 服务器”选项卡来执行此操作。

    6.5K00

    如何在Ubuntu使用Passenger安装Rails和nginx

    通过Phusion Passenger安装时,可以轻松配置这两个程序,以便在服务器协同工作。 您可以作为具有sudo权限的用户Ubuntu服务器运行本教程。...source ~/.rvm/scripts/rvm 为了工作, RVM 有一些自己的依赖需要安装。您可以看到这些内容: rvm requirements RVM向您显示的文本中,请查找此段落。...如果您错过任何一个,Passenger将通过Ubuntu的apt-get安装程序您知道如何安装它们。 下载所有缺少的依赖项后,重新启动安装。...如果您将其指向http:// youripaddress/,您可以浏览器中看到屏幕显示令人兴奋的“Welcome to nginx”。...$ rails new my_awesome_rails_app 如果您使用的是CentOS系统,可以参考腾讯云开发者实验室 Linux 上部署 Ruby On Rails 环境,腾讯云社区也提供Ruby

    3.6K40

    从Web开发者的视角来解读MVC架构

    该框架的主要功能是:通过允许多名开发人员共同在一个项目开展工作,以分离应用程序的功能、逻辑和接口,进而促进有组织的编程实现方法。下面,让我们从Web开发人员的角度来解读MVC的不同组件。...首先,让我们来看看有哪些使用到了MVC的流行Web框架: Ruby on Rails (Ruby) Express (JS) Backbone (JS) Angular (JS) Laravel (PHP...对于Ruby on Rails而言,我们可以使用嵌入式的ERB(https://ruby-doc.org/stdlib/libdoc/erb/rdoc/ERB.html)。...而对于Ruby语言,我们也可以使用Haml(http://haml.info/)和针对Python的Flask(http://flask.pocoo.org/)。...例如:用户访问页面时点击某个链接,触发了一个GET请求;或者是以提交表单的形式,发送一个POST请求;当然我们也可以发出删除、或提出更新等类型的请求

    3.5K20

    Ansible和Docker的作用和用法

    这种更简单的操作模式我把精力集中如何将我的技术设施私有化,提高了我的工作效率。与 Unix 的模式一样,Ansible 提供大量功能简单的模块,我们可以组合这些模块,达到不同的工作要求。...这个步骤的目的是能正确解决应用和它的依赖关系, Docker 容器正确链接起来,保证真正的应用容器启动前能通过所有测试项目。 CMD 这个步骤是新的 web 应用容器启动后执行的。...当 Docker 容器里面的应用需要响应来自外界的请求时,这个端口可用于反向代理或负载均衡。...从无到有搭建一个完整的 Rails 应用可以12分钟内完成,这种速度放在任何场合都是令人印象深刻的。...我2014年1月伦敦 Docker 会议讲过这个主题,已经分享到 Speakerdeck了。

    2.1K20

    Serverless 微服务架构案例无服务器架构 (Serverless Architectures) 简介AWS Lambda 的编程模型Amazon API Gateway + AWS Lamb

    请求通过域名访问到应用的时候,应用会将 HTTP 请求转发给 CDN (CloudFornt)。 CloudFront 会根据转发规则把对应的 API 请求转发到 API Gateway 。...整套 Rails 应用部署 AWS ,并且通过网关和内部业务 BOSS (Business Operating Support System) 系统隔离。...负载均衡器会根据各 EC2 计算实例的负载状态将请求转发到不同的实例Ruby On Rails 应用上。每一个应用都是一个典型的 MVC Web 应用。...基础设施即代码(Infrastructure As Code)建立一个混合的遗留的 Ruby 代码库。...开发的项目上进行 DevOps 转型就像在行进的汽车上换车轮,一不留心就会所有团队停止工作。因此我建议通过设立并行的新团队来同时完成新功能的开发和 DevOps 转型的试点。

    2.3K10

    第10章 使用 Kotlin 创建 DSL第10章 使用 Kotlin 创建 DSL

    例如,Rails框架被称为基于Ruby的DSL,用于管理Ruby开发的Web应用程序。...Rails之所以被称为DSL,原因之一在于Rails应用了一些Ruby语言的特性,使得基于Rails编程看上去与基于通用目的的Ruby语言编程并不相同。...而实际Kotlin 中,类的对象实例我们也可以像函数那样直接使用 () 操作符来调用这个类的一个 invoke 操作符函数。用代码示例来说明可能会更加简单直接。...但是 DSL 中,将会非常有用。这个特性会使得我们的 DSL 代码更加简洁清晰。 10.3 实现一个http ajax请求的DSL 我们现在已经基本知道 Kotlin 中 DSL 的样子了。...我们这里主要用RxKotlin来进行请求回调的异步处理。

    1.3K20
    领券