我在rails应用程序上有一个ruby,我需要运行一个rake任务,它将命中twitterstream api并将推文从某个位置插入到数据库中。为此,我创建了一个名为uncat_tweets的表。我的rake任务看起来像这样
task :get_uncat_tweets => :environment do
TweetStream.configure do |c|
...
...
end
puts "#{UncatTweets.count}
client = TweetStream::Client.new()
client.locations(coordinates) do |status|
puts "#{status.text}"
t = UncatTweets.new()
t.text = status.text
t.long = ...
t.lat = ...
t.time = ....
t.save!
end
我的uncat_tweets模型如下所示:
class UncatTweets < ActiveRecord::Base
attr_accessible :lat, :long, :text, :time, :user
end
当我运行rake get_uncat_tweets时,tweetstream工作并发出推文。但rake任务并没有推向数据库。第puts "#{UncatTweets.count}"
行返回。我去了rails控制台并试图插入一个虚拟的UncatTweets值,它工作正常!但是当我运行rake任务时,程序会毫无错误地继续运行但从不会进入数据库。这里发生了什么事?我无法找到解决此问题的方法。
请帮帮我
答案 0 :(得分:0)
假设这是Rails 3,你应该遵循Rails 3方法来做到这一点。
首先,在您的Rails应用中打开db/seeds.rb
。像这样设置它(基于你上面的rake任务):
TweetStream.configure do |c|
...
...
end
puts "Number of tweets: #{UncatTweets.count}"
client = TweetStream::Client.new()
# Note you will have to define the following variable "coordinates" somewhere
client.locations(coordinates) do |status|
UncatTweets.create(:text => status.text, :long => ..., :lat => ..., :time => ...)
end
然后通过rake db:seed