セルロイドを使用する私のプロジェクトでプールを使用しようとしています。ただし、セルロイドpool
のクラスでメソッドを呼び出すと(したがって、からメソッドを受け取る)、一貫してエラーが発生します。include
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: Celluloid:Module の未定義のメソッド「services」
問題のある行は/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
問題が私の特定のプロジェクトにないことを確認するために、この記事からプールを利用するコード サンプルを取得し、それを実行しようとしました。
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 にバグがあるか、依存関係を適切にロードしていないようです。しかし、私はrequire 'celluloid/supervision'
これを解決しようとしましたが、役に立ちませんでした。私は自分の側で何か間違ったことをしていますか、それともセルロイドのバグですか?