2012-03-24 4 views
0

Amazonのリスニング環境をスピンアップするために、このチュートリアル(http://arfon.org/twitter-streaming-with-eventmachine-and-dynamodb)に従ってください。特定のつぶやきを受け取り、それらをdynamo dbに追加します(新しいスレッドを介して)。イベントマシンのgem - > spawn_threadpoolのブロック

require 'aws-sdk' 
require 'eventmachine' 
require 'tweetstream' 

AWS_ACCESS_KEY = 'HERE IT IS' 
AWS_SECRET_KEY = 'YES HERE' 


dynamo_db = AWS::DynamoDB.new(:access_key_id => AWS_ACCESS_KEY, :secret_access_key => AWS_SECRET_KEY) 

table = dynamo_db.tables['tweets'] 
table.load_schema 

TweetStream.configure do |config| 
    config.username = 'geezlouis' 
    config.password = 'password' 
    config.auth_method = :basic 
end 

EM.run{ 
    client = TweetStream::Client.new 

    def write_to_dynamo(status) 
    EM.defer do 
     tweet_hash = {:user_id => status.user.id, 
        :created_at => status.created_at, 
        :id => status.id, 
        :screen_name => status.user.screen_name} 

     begin 
     table.items.create(tweet_hash) 
     rescue Exception => e 
     puts e.message 
     puts e.backtrace.inspect 
     end 
    end 
    end 

    client.track("Romney", "Gingrich") do |status| 
    write_to_dynamo(status) 
    end 
} 

未定義のローカル変数やメソッド `テーブルの主要について::オブジェクト

["tweets.rb:31:in `block in write_to_dynamo'", "/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:1060:in 

call'", "/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:1060:in ブロックspawn_threadpoolで"」私は、次の取得スレッドを生成するためにeventmachineを使用した場合すべてがしかし、正常に動作します]

答えて

0

テーブルはローカル変数であるため、メソッドスコープから到達することはできません。

あなたは次のことをしたい:

require 'aws-sdk' 
require 'eventmachine' 
require 'tweetstream' 

AWS_ACCESS_KEY = 'HERE IT IS' 
AWS_SECRET_KEY = 'YES HERE' 


dynamo_db = AWS::DynamoDB.new(:access_key_id => AWS_ACCESS_KEY, :secret_access_key => AWS_SECRET_KEY) 

table = dynamo_db.tables['tweets'] 
table.load_schema 

TweetStream.configure do |config| 
    config.username = 'geezlouis' 
    config.password = 'password' 
    config.auth_method = :basic 
end 

EM.run{ 
    client = TweetStream::Client.new 

    def write_to_dynamo(status, table) 
    EM.defer do 
     tweet_hash = {:user_id => status.user.id, 
        :created_at => status.created_at, 
        :id => status.id, 
        :screen_name => status.user.screen_name} 

     begin 
     table.items.create(tweet_hash) 
     rescue Exception => e 
     puts e.message 
     puts e.backtrace.inspect 
     end 
    end 
    end 

    client.track("Romney", "Gingrich") do |status| 
    write_to_dynamo(status, table) 
    end 
} 

あなたもそうな「例外」をキャッチ停止し、代わりに「はStandardError」をキャッチしたいと思う、そうでなければ、例えばCTRL + Cプログラムすることができません。

+0

私は何かが欠けていると思う - >私が提出したものの正確なペーストのように見える。 –

関連する問題