我在应用程序控制器中有以下内容:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
def api_auth
@api_key = Rails.application.secrets.api_key
@api_secret = Rails.application.secrets.api_secret
@host_id = Rails.application.secrets.host_id
@data_type = 'JSON'
@options = {
body: {
api_key: @api_key,
api_secret: @api_secret,
host_id: @host_id,
data_type: @data_type
}
}
end
end
在我的控制器里,我有......
before_action :api_auth
...
def get_stuff
response = HTTParty.post("api_url", @options)
stuffs = response.parsed_response["stuffs"]
current_stuffs = stuff.all
stuffs.each do |w|
#unless stuff id already exists in DB, then create it
#what about if an attribute of a stuff is updated? How do we capture that? UUID?
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
端
..以及以下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
路由正确,运行任务时没有任何错误。但是,当我运行任务时,我的数据库更新操作没有发生。
我知道该动作有效,因为我在视图中设置了一个简单的button_to来调用相同的动作。
答案 0 :(得分:1)
你是从错误的一端接近它。而不是尝试从应用程序内部访问http端点,只需直接执行该操作的逻辑。
您已进入应用环境并可以访问所有代码!你不需要 http接口。
但是,如果您坚持使用http接口,则可以采用与获取外部api端点相同的方式执行此操作。例如,使用Net::HTTP。
答案 1 :(得分:1)
对于后人来说,这就是我想出的:
我摆脱了app控制器中的代码。
在stuff.rb我做了......
solr.facets
端
在控制器中,只需使用...
调用get get_stuff方法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
..以及以下rake任务......
def get_stuff
Stuff.get_stuff
end