2016-09-09 2 views
0

私は今朝初めてセルロイドの宝石を使い始めました。私はこれに続くRailscasts tutorialと物事を把握しようとしています。セルロイド0.17.3予期しない「未定義のメソッド」のエラーを与える

私は"SomeClass"と呼ばれるクラスを持っていますが、そのメソッドは1つしかありません。ここでは、コードです:私はクラスの新しいインスタンスを作成して(すなわち"assholify!"バタンと)そのメソッドを呼び出すと

require 'celluloid' 

class SomeClass 
    include Celluloid 
    def initialize(name) 
    @name = name 
    end 

    def assholify() 
    puts "#{@name} has become an ASSHOLE." 
    end 
end 

、私はundefined method 'assholify!'、エラーを取得しています。しかし、セルロイドは、メソッドを非同期的にトリガすることになっています。だからここに私は、メソッドを呼び出しています方法です。ここで

names = ['John', 'Tom', 'Harry'] 

names.each do |name| 
    n = SomeClass.new name 
    n.assholify! 
end 

は、エラーの完全なバックトレースです:

I, [2016-09-09T11:28:02.488618 #3682] INFO -- : Celluloid 0.17.3 is running in BACKPORTED mode. [ http://git.io/vJf3J ] 
/home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:42:in `rescue in check': undefined method `assholify!' for #<SomeClass:0x10897dc> (NoMethodError) 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:39:in `check' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:26:in `dispatch' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/call/sync.rb:16:in `dispatch' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/cell.rb:50:in `block in dispatch' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/cell.rb:76:in `block in task' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/actor.rb:339:in `block in task' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/task.rb:44:in `block in initialize' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/task/fibered.rb:14:in `block in create' 
    from (celluloid):0:in `remote procedure call' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/call/sync.rb:45:in `value' 
    from /home/railsdev/.rvm/gems/ruby-2.3.1/gems/celluloid-0.17.3/lib/celluloid/proxy/sync.rb:22:in `method_missing' 
    from some_class.rb:18:in `block in <main>' 
    from some_class.rb:16:in `each' 
    from some_class.rb:16:in `<main>' 

は、なぜ私はこのエラーを取得していますか?関数を呼び出すのは正しい方法ですか?また、どうすればCelluloid 0.17.3 is running in BACKPORTED mode.の警告を取り除くことができますか?

答えて

1

undefined method最近のバージョンのセルロイドgemでは、アクターメソッドがbangで呼び出されないため、エラーが発生しました。代わりに、n.async.assholifyのようなメソッドを呼び出します。 、"Celluloid 0.17.0 is running in BACKPORTED mode"警告について

names = ['John', 'Tom', 'Harry'] 

names.each do |name| 
    n = SomeClass.new name 
    n.async.assholify # Instead of "n.assholify!" 
end 


this wikiを見てみましょう:だからここのコードがどのように見えるかです。限られた時間のバックポートモードがデフォルトです。 require 'celluloid'の代わりに require 'celluloid/current'を使用すると、この警告が表示されません。

関連する問題