gpt4 book ai didi

ruby - 尝试使用池会导致 Celluloid 崩溃

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:42 26 4
gpt4 key购买 nike

我正在尝试在我的一个使用 Celluloid 的项目中使用池。但是,每当我在 include 的 Celluloid 类上调用 pool 方法(因此从 Celluloid::ClassMethods 接收方法)时,我总是得到错误:

NoMethodError: undefined method `services' for Celluloid:Module
router at /Users/my_username/.rvm/gems/jruby-9.0.5.0/gems/celluloid-supervision-0.20.6/lib/celluloid/supervision/deprecate/supervise.rb:54
supervise at /Users/my_username/.rvm/gems/jruby-9.0.5.0/gems/celluloid-supervision-0.20.6/lib/celluloid/supervision/deprecate/supervise.rb:6
pool at /Users/my_username/.rvm/gems/jruby-9.0.5.0/gems/celluloid-pool-0.20.5/lib/celluloid/supervision/container/behavior/pool.rb:13
<top> at celluloid_pool_test.rb:14

具体来说,这部分似乎是问题所在:

NoMethodError: undefined method `services' for Celluloid:Module

它告诉我违规行是 /Users/my_username/.rvm/gems/jruby-9.0.5.0/gems/celluloid-supervision-0.20.6/lib/celluloid/supervision/deprecate/supervise。 rb:54。事实证明,该行包含 Celluloid::Supervision.router 方法的代码:

def router(*_args)
# TODO: Actually route, based on :branch, if present; or else:
Celluloid.services ### this line is what causes the error
end

为了确保问题不是出在我的特定项目上,我从 this article 中获取了一个代码示例它利用池并尝试运行它:

require 'celluloid'
require 'mathn'

class PrimeWorker
include Celluloid

def prime(number)
if number.prime?
puts number
end
end
end

pool = PrimeWorker.pool

(2..1000).to_a.map do |i|
pool.prime! i
end

sleep 100

它失败了,错误与我的项目完全相同:

最后,我在 IRB 中运行了一段非常简单的代码,看看 pool 是否触发了关于 services 的错误:

class Foo
include Celluloid
end
Foo.pool

果然,我得到了完全相同的错误。 Celluloid 中似乎存在错误,或者我没有正确加载依赖项。但是,我在尝试解决此问题时确实需要'celluloid/supervision',但无济于事。我是不是做错了什么,或者这是 Celluloid 中的错误?

最佳答案

似乎其他人之前也遇到过这个问题:https://github.com/celluloid/celluloid-pool/issues/10 .我想这与 Celluloid.services 被弃用并且不能在较新版本的 Celluloid 中工作有关,因此使用 require 'celluloid/current' 而不仅仅是 require 'celluloid' 似乎可以解决问题。

关于ruby - 尝试使用池会导致 Celluloid 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39379387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com