- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Ruby 1.9.3,并在 Mac OSX 10.7 上进行测试。
我有一个 Sender
类,它应该向某个 URL 发送请求:
require "celluloid"
require "curb"
class Sender
include Celluloid
def send(msg)
Curl.get($URL) do |url|
url.headers["content-type"] = "text/html;charset=utf-8"
end
rescue Exception => e
$LOG.error "[erro]-> [ #{e.message} "
end
end
我有另一个进程应该从 RabbitMQ 队列接收消息并使用 Sender
发送请求:
AMQP.start(:host => $AMQP_URL) do |connection|
@channel ||= AMQP::Channel.new(connection)
@queue ||= @channel.queue("results")
pool = Sender.pool
@queue.subscribe do |metadata, body|
msg = MessagePack.unpack(body)
pool.send(msg)
end
end
当我运行它时,我得到:
15:56:59 results.1 | I, [2013-02-12T15:56:59.422192 #44490] INFO -- : Terminating 5 actors...
15:56:59 results.1 | E, [2013-02-12T15:56:59.422640 #44490] ERROR -- : Celluloid::PoolManager crashed!
15:56:59 results.1 | NoMethodError: undefined method `each' for nil:NilClass
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/macosx.rb:39:in `<top (required)>'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:81:in `load'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:81:in `load_file'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:43:in `block (2 levels) in load_all'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:38:in `each'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:38:in `block in load_all'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:35:in `each'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:35:in `load_all'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/collection.rb:72:in `fact'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter.rb:94:in `block (2 levels) in singletonclass'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid.rb:37:in `cores'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/pool_manager.rb:12:in `initialize'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/calls.rb:57:in `dispatch'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/actor.rb:323:in `block in handle_message'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/tasks/task_fiber.rb:22:in `block in initialize'
15:56:59 results.1 | E, [2013-02-12T15:56:59.423117 #44490] ERROR -- : Celluloid::PoolManager#finalize crashed!
15:56:59 results.1 | NoMethodError: undefined method `+' for nil:NilClass
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/pool_manager.rb:26:in `finalize'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/actor.rb:376:in `block in run_finalizer'
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/tasks/task_fiber.rb:22:in `block in initialize'
15:56:59 results.1 | I, [2013-02-12T15:56:59.424508 #44490] INFO -- : Shutdown completed cleanly
15:56:59 results.1 | /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/macosx.rb:39:in `<top (required)>': undefined method `each' for nil:NilClass (NoMethodError)
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:81:in `load'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:81:in `load_file'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:43:in `block (2 levels) in load_all'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:38:in `each'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:38:in `block in load_all'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:35:in `each'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/loader.rb:35:in `load_all'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter/util/collection.rb:72:in `fact'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/facter-1.6.13/lib/facter.rb:94:in `block (2 levels) in singletonclass'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid.rb:37:in `cores'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/pool_manager.rb:12:in `initialize'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/calls.rb:57:in `dispatch'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/actor.rb:323:in `block in handle_message'
15:56:59 results.1 | from /Users/info/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/celluloid-0.12.3/lib/celluloid/tasks/task_fiber.rb:22:in `block in initialize'
15:56:59 results.1 | exited with code 1
由于池管理器,我是否做错了什么导致进程崩溃?
最佳答案
您的回答在 Reel 中得到了否定的证明.特别是在它的机架处理程序中。您可以在这里深入研究并从那里对您需要的一切进行逆向工程:
Reel 是 Celluloid(::IO) 功能的绝佳演示,并且正是您想要的......除了相反。它通过一个池接收请求,你的情况是否定的。
如您所知,这里的主要内容是您正在与 PoolManager 对话,而不是任何一个 Actor。这是您可以重新考虑您的方法的主要部分。考虑到这一点进行重构:
Celluloid::Actor[:reel_rack_pool] = ::Reel::RackWorker.pool(size: options[:workers], args: [self])
::Reel::Server.supervise_as(:reel_server, options[:host], options[:port]) do |connection|
Celluloid::Actor[:reel_rack_pool].handle(connection.detach)
end
一旦您考虑了该代码,请随时用新的错误或问题更新您的问题。您肯定会在 freenode (IRC) 和/或 Celluloid 的邮件列表中获得有关#celluloid 的帮助,该邮件列表非常活跃,充满了敬业和知识渊博的人,他们非常欢迎不习惯 Celluloid 来龙去脉的人们。
关于ruby - 如何使用 Celluloid 从线程池运行 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835754/
我是 Celluloid 的新手,对矿池和 future 有一些疑问。我正在构建一个简单的网络爬虫(请参阅底部的示例)。我的 URLS 阵列有几十万个 URL,所以这个例子被剥离到几百个。 我现在要做
为了理解赛璐珞,我写了下面的脚本。 require 'celluloid/current' class Processor include Celluloid def perfom(numbe
我正在尝试在我的一个使用 Celluloid 的项目中使用池。但是,每当我在 include 的 Celluloid 类上调用 pool 方法(因此从 Celluloid::ClassMethods
我在 Google 计算引擎上部署了一个 JRuby 应用程序。我注意到加载 celluloid gem 需要一段时间。在查看更多细节后,我发现加载 celluloid/internals/stack
我的问题应该能帮助我走上正确的道路。 我正在使用并发框架 celluloid 开发一个 ruby 应用程序。这是它的样子: 我有一些插件。我想同时运行它们并等到最后一个完成。我有一个抽象类,叫做P
最近我将我的 Rails 版本更新到 4.2.3 并将 ruby 版本更新到 ruby-2.2.3。之后,当我 bundle 它时会出现以下错误: $ bundle Fetching gem me
我有一个 Pinoccio microcontroller (绝对棒极了,试试看)。微 Controller 为其服务器打开一个套接字。我正在 Ruby 应用程序中编写 TCP 套接字服务器,我将在其
我正在构建一个小的 ruby 程序来运行与 MQTT 的连接。服务器并订阅 channel 。我正在使用 mosquitto gem 这只是 libmosquitto 的桥梁C 库。 我创建了一个
情况 我使用 Chrome 的 Remote Debugging Protocol 连接到 WebSocket ,使用 Rails 应用程序和实现 Celluloid 的类,或者更具体地说,cellu
每次我启动该应用程序时,我第一次调用它时,它都会返回 Dead Actors。之后它按预期返回。 require 'celluloid' class BatchProcess include Ce
我正在使用 Ruby 1.9.3,并在 Mac OSX 10.7 上进行测试。 我有一个 Sender 类,它应该向某个 URL 发送请求: require "celluloid" require "
我知道 Http.rb 和 Celluloid[1] 目前不支持当前超时,但是否有临时解决方法? 这是我要运行的代码: def fetch(url, options = {} ) puts
我的应用中有 2 个 Actor 。服务和 PushSocket。我正在使用邮箱在两个 Actor 服务和 PushSocket 之间进行通信。当我只是在 PushSocket 上创建单个实例并将消息
我看到了一些我试图理解的奇怪问题,该问题的第一部分是试图了解数据库池在 Celluloid 与 Celluloid/ZMQ 中的工作方式。 数据库池。 1) 线程。 5.times do Th
我正在使用 Celluloid::IO 进行 DNS 查询,下面是我的代码: require 'celluloid/io' class MyResolver include Celluloid
我已经将 rvm 设置为 # .rvmrc rvm use rbx-2.0.0-rc1 并且它正确地设置了版本 $ ruby -v rubinius 2.0.0rc1 (1.8.7 release 2
我正在尝试安装 GitLab CI,但出现此错误。 Gem::InstallError: celluloid requires Ruby version >= 1.9.2. An error occu
我按照 Sidekiq 的简单设置说明找到了 here ,但我无法让它工作。 这是堆栈跟踪。我也启动了redis服务器。有人知道我在这里缺少什么吗? E, [2012-09-28T09:11:36.4
我是一名优秀的程序员,十分优秀!