2012-04-07 27 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

相关问题