0

OS X マシンで 4 ノードの riak セットアップを実行しています。私は次のプログラムを持っています -

require 'riak'




class RiakClient < Riak::Client
    #attr_accessor :bucket

    def initialize(hosts="")
        return Riak::Client.new(:nodes => [{:http_port => 8091},{:http_port =>8092},{:http_port=>8093},{:http_port =>8094}])
    end

    def get_me(bucket, key)
        obj = self.bucket(bucket).get(key)
        puts obj.data
    end

    def put_me(bucket, key, data, content_type)
        obj=self.bucket(bucket).get_or_new(key)
        puts obj.class
        obj.content_type=content_type
        obj.raw_data=data
        obj.store
    end
end



if __FILE__ == $0
    my_client=RiakClient.new
    my_client.put_me("doc", "index.html", "some data goes here", "text/html")
    hash=my_client.get_me("doc", "index.html")
end

次のエラーが表示されます

NilClass
riak_client.rb:32:in `put_me': undefined method `content_type=' for nil:NilClass (NoMethodError)
    from riak_client.rb:42:in `<main>'

RiakBucket および RiakObject クラスをインポートする必要がありますか? ここでは RiakBucket メソッドにアクセスできないようですか?

4

1 に答える 1

1

ここでの実際の問題は、なぜget_or_newnil を返すのかということです。

おそらく、initialize()メソッドが新しい Riak::Client を返しますが、親オブジェクトである Riak::Client が初期化されないことが原因です。return Riak::Client.newinの代わりに super を呼び出してみてくださいinitialize

Riak::Client のサブクラス化は、ここでは少し疑わしいです。代わりに委任する傾向があります。

于 2012-06-25T06:19:22.310 に答える