セルロイドを使用する私のプロジェクトでプールを使用しようとしています。しかし、私はクラスinclude
Sセルロイド(従ってCelluloid::ClassMethods
からメソッドを受け取る)にpool
メソッドを呼び出すたびに、私は一貫してエラーを取得:プールを使用しようとするとセルロイドがクラッシュする
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
それは私のプロジェクトとまったく同じエラーで失敗しました:
は最後に、私はpool
がservices
に関するエラーをトリガするものであるかどうかを確認するためにIRBのコードの死者シンプルな作品を走った:
class Foo
include Celluloid
end
Foo.pool
確かに、私はまったく同じエラーを受けました。セルロイドにバグがあるか、依存関係を適切にロードしていないようです。しかし、私はrequire 'celluloid/supervision'
をこれを解決する私の試みで無駄にしました。私の最後に何か間違っているのですか、これはセルロイドのバグですか?
これは正解です。 – digitalextremist