2012-04-07 26 views
3

這是我正在嘗試做的事情:查找是否有人推特提供了特定的課程。如果有人確實發了推文,我想將該推文保存到我的Tweet模型中,然後在相應的課程頁面中顯示該推文。如何在heroku中運行「Rails Runner」?

這些腳本通過運行rails runner get_tweets.rb在本地工作,但在Heroku上似乎腳本被執行但不寫入數據庫。在heroku中,我正在運行heroku run rails runner get_tweets.rb(使用Cedar堆棧)。

def get_course_tweets 
    @courses = Course.all 
    @courses.each do |course| 
    url = course.url 
    tweets = Twitter.search(url, {:rpp => 100, :recent => true, :show_user => true}) 
    tweets.each do |tweet_info| 
     unless Tweet.find_by_tweet_id(tweet_info.id).present? 
     tweet = Tweet.new 
     tweet.course_id = course.id 
     tweet.tweet_id = tweet_info.id 
     tweet.tweet_text = tweet_info.text 
     tweet.from_user = tweet_info.from_user 
     begin 
      tweet.save! 
     rescue => error 
      puts error 
     end 
     end 
    end 
    end 
end 

編輯:

的當前錯誤,我從救助獲得如下:

PG::Error: ERROR: value "186306985577299969" is out of range for type integer : INSERT INTO "tweets" ("book_id", "course_id", "created_at", "from_user", "tutorial_id",  "tweet_already_exists", "tweet_id", "tweet_posted_to_reviews", "tweet_text", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id" 
+0

也許你應該真的打印出錯誤,如果它'救援',看看是否有任何發生? – 2012-04-07 17:22:36

+0

嗨安德魯,這裏是我得到的錯誤:PG ::錯誤:錯誤:值「186306985577299969」超出範圍類型整數 :INSERT INTO「tweets」(「book_id」,「course_id」,「created_at」,「 from_user「,」tutorial_id「,」tweet_already_exists「,」tweet_id「,」tweet_posted_to_reviews「,」tweet_text「,」updated_at「)VALUES($ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8,$ 9,$ 10) 「id」 – 2012-04-07 17:56:03

回答

3

如可以從錯誤中可以看出

value "186306985577299969" is out of range for type integer

您需要使用不同的數據類型(對於tweet_id,我相信),推測是BIGINT,這聲音從-9223372036854775808到9223372036854775807

ES爲此Rails中,你可以在你的up遷移傳遞:limit => 8

change_column :tweets, :tweet_id, :integer, :limit => 8 

請注意,您應該始終某種日誌或報告時,你rescue,否則像這樣的錯誤變得非常難以追查,因爲他們默默地被繞過。

+0

嗨安德魯,非常感謝你!這是我最終做的: 't.column:tweet_id,:bigint' 出於好奇,在這種情況下,limit:> 8會做什麼? – 2012-04-07 18:57:49

+0

它指示它使用一個8字節的整數,它是一個'BIGINT',我不希望':bigint'在遷移中作爲一種類型工作,因爲它似乎沒有記錄在我能找到的任何地方。 – 2012-04-07 19:11:57

+0

令人驚歎!非常感謝你的幫助 - 使我的一天! – 2012-04-07 21:28:16

0

Twitter API實際上爲推文和用戶等發回兩種類型的ID,一種是數字,另一種是數字的字符串表示形式。這是因爲這是一個非常現實的可能性,他們會有很多推文和用戶,這些ID可能會在不同的實現中溢出。如果在插入時將字符串用作值,則不應再發生。

該字段被稱爲id_str

相關問題