2016-11-01 11 views
0

からコントローラのアクションを呼び出します次のレーキタスク...は、私はアプリケーションコントローラで、次のしているrakeタスク

desc "Heroku task to get stuff" 
task :get_stuff => :environment do 
    puts "Getting stuff from api..." 
    session = ActionDispatch::Integration::Session.new(Rails.application) 
    session.post "/posts/get_stuff" 
    puts "done." 
end 

ルートが正しいので、タスクを実行してもエラーは発生しません。しかし、私がタスクを実行すると、私のDB更新アクションは起こっていません。

同じアクションを呼び出すビューに簡単なbutton_toが設定されているため、このアクションは機能します。

答えて

1

あなたは間違ったところから近づいています。アプリ内からhttpエンドポイントにアクセスしようとするのではなく、そのアクションのロジックを直接実行してください。

あなたは既にアプリケーション環境にあり、すべてのコードにアクセスできます。 はhttpインターフェイスがである必要はありません。

しかし、httpインターフェイスを使用することを強くお勧めする場合は、外部APIエンドポイントと同じ方法でこれを行うことができます。たとえば、Net::HTTPを使用します。後世のために

+0

私はそれが私の疑問です。すでにそこにあるロジックをコントローラにどのように呼び出すのですか?私は、ロジックがコード内にあることを知っています...この場合のコントローラ。ロジックをモデルに移動し、そこからクラスメソッドを使って呼び出すことができますが、コントローラのロジックを残しておくことは、自分がしたいことに適していると思います。安心して他のコントローラを呼び出す別の方法がありますか? – Lumbee

+1

@ Lumbeeどのような種類のロジックに依存しますか。そのロジックを別の場所(モデルやサービスオブジェクトなど)に移動する方がよいでしょう –

+0

私はそれを聞いています。質問に文脈とコードをもう少し追加します。うまくいけば、それは今より意味をなさない。 – Lumbee

1

ここでは、私が思い付いたものです:

私はアプリのコントローラにコードを処分しました。私がやったstuff.rbで

...コントローラで

class Stuff < ApplicationRecord 

    def self.get_stuff  
    options = { 
    body: { 
    api_key: Rails.application.secrets.zoom_api_key, 
    api_secret: Rails.application.secrets.zoom_api_secret, 
    host_id: Rails.application.secrets.zoom_host_id, 
    data_type: 'JSON' 
    } 
} 
    end 

    response = HTTParty.post("api_url", @options) 

    stuffs = response.parsed_response["stuffs"] 
    current_stuffs = stuff.all 
    stuffs.each do |w| 

    unless (current_stuffs.pluck :stuff_id).map(&:to_s).include?(w["id"].to_s) 
    stuff.create(stuff_id: w["id"], topic: w["topic"], start_time: w["start_time"], join_url: w["join_url"]) 
    end 
end 

エンド

、ちょうど

def get_stuff 
    Stuff.get_stuff 
end 

..and ...とget_stuff取得メソッドを呼び出しますレーキタスクの後に...

desc "Heroku task to get stuff" 
task :get_stuff => :environment do 
    puts "Getting stuff from api..." 
    Stuff.get_stuff 
    puts "done." 
end 
関連する問題