2017-02-05 11 views
0

私はRails:バックグラウンドタスクから取得したデータをホーム画面に表示する方法は?

$ rake recurring:init 
を実行したときに、私は 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 

でこれを実行するraketaskを持って

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 

を持ってlib/recurring.rbAlexa
からhttp://example.com/のウェブサイトのランキングをこすりするには、このコードを持っています

タスクは毎日実行されます。 t 12:00 utcと私は@rank(行番号10 recurring.rb)のウェブサイトのランクを持っています。

しかし、このデータをインデックスページに表示するにはどうすればよいですか?私はバックグラウンド処理が初めてです。どんな助けでも大歓迎です。

+0

あなたの質問は明らかではありません。このランク情報をdbに保存すると、ビューに自動的に反映されます。ですから、問題はあなたがデータをdbに保存していないか、またはそれをビューに表示する方法がわからないことですか? –

+0

@Joel_Blum私は '@ rank'をdbに保存していません。そこにはdbが関与することなく表示される方法がありますか –

+0

おそらくまともな選択肢はありませんが、dbに保存するのはなぜでしょうか? –

答えて

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 
関連する問題