2017-02-05 32 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