2017-02-05 29 views
0

我有这样的代码从Alexa
刮去http://example.com/网站排名在lib/recurring.rb我有Rails:如何在主屏幕中显示从后台任务获取的数据?

module Recurring 
    class MyTask 
    include Delayed::RecurringJob 
    run_every 1.day 
    run_at '12:00pm' 
    timezone 'UTC' 
    def perform 
     url = "http://alexa.com/siteinfo/example.com" 
     doc = Nokogiri::HTML(open(url)) 
     @rank = doc.at_css("strong.metrics-data.align-vmiddle").text 
    end 
    end 
end 

我有一个raketask在lib/tasks/my_task.rake

namespace :recurring do 
    desc "Get website rank everyday at 12:00 OM UTC" 
    task init: :environment do 
    #Delete any previously-scheduled recurring jobs 
    Delayed::Job.where('(handler LIKE ?)', '--- !ruby/object:Recurring::%').destroy_all 

    Recurring::MyTask.schedule! 
    end 
end 

执行此,当我运行

$ rake recurring:init 

任务每天执行一个牛逼12:00 UTC与我在@rank网站排名(行号10 recurring.rb)。

但我怎么能显示我的索引页这个数据?我是新来的后台处理。任何帮助非常感谢。

+0

你的问题不明确。一旦你将这个排名信息保存到分贝,它会自动反映在你的意见。所以要么是问题是你没有将数据保存到数据库,或者你不知道如何在视图中显示它,这是什么? –

+0

@Joel_Blum我不保存'@ rank'到db。有没有办法,我可以得到它diplayed没有DB参与 –

+0

可能没有理智的选择,但它保存到数据库,你为什么不希望涉及分贝? –

回答

1

的实例变量可以在内存和你的rake任务和服务器之间不共享。所以要将数据从一个传递到另一个,需要持久性。数据库是标准选择,但您可以假设使用文件系统,Redis等。

既然你加入:environment给你的任务,你可以访问你的模型(没有它,任务就像是一个独立的Ruby脚本)。

例如:

rails g model SiteRanking rank:string 
rake db:migrate 

# in rake task 
SiteRanking.create(rank: @rank) 

# in controller 
@rank = SiteRanking.last.try(:rank) # will be nil if no record exists 
相关问题