调试调用控制器操作的 rake 任务
Debugging a rake task that is calling a controller action
我有以下抽成任务...
task :demote_sausages => :environment do
session = ActionDispatch::Integration::Session.new(Rails.application)
puts "this is the demote sausages task"
actions = UserAction.where action_date: Time.now.yesterday.strftime("%m/%d/%Y")
actions.each do |a|
session.post "/demote_sausage", {user_id: a.user_id}
end
end
...这是控制器操作...
def demote_sausage
puts "made it to controller action"
@z_options[:body][:id] = params[:user_id]
@z_options[:body][:type] = 1
HTTParty.post("https://api.blah.org/v1/user/update", @z_options)
end
我的问题是,我不确定我是否正在执行我的控制器操作。我在 rake 任务中看到了 puts 消息,但我没有在控制器操作中看到 puts(但也许我不应该?)。
关于如何调试控制器中正在发生的事情的任何提示?
我通过将会话分配给一个变量然后显示它来调试它:
task :demote_sausages => :environment do
session = ActionDispatch::Integration::Session.new(Rails.application)
puts "this is the demote sausages task"
actions = UserAction.where action_date: Time.now.yesterday.strftime("%m/%d/%Y")
actions.each do |a|
var = session.post "/demote_sausage", {user_id: a.user_id}
puts var.inspect
end
end
这样做我可以看到该请求返回了 422 错误代码:无法验证 CSRF 令牌真实性已完成 422 无法处理。我对为什么抛出这个错误感到困惑。我认为 422 是从您的应用程序所在的域以外的域发出请求时 运行。在这种情况下,它都是本地主机。如果有人有好的答案,请添加为评论。
由于我在此处执行 post 请求,因此我需要跳过对身份验证令牌的检查。我是这样做的...
skip_before_action :verify_authenticity_token, :only => [:demote_sausage]
...在我的控制器中。
我有以下抽成任务...
task :demote_sausages => :environment do
session = ActionDispatch::Integration::Session.new(Rails.application)
puts "this is the demote sausages task"
actions = UserAction.where action_date: Time.now.yesterday.strftime("%m/%d/%Y")
actions.each do |a|
session.post "/demote_sausage", {user_id: a.user_id}
end
end
...这是控制器操作...
def demote_sausage
puts "made it to controller action"
@z_options[:body][:id] = params[:user_id]
@z_options[:body][:type] = 1
HTTParty.post("https://api.blah.org/v1/user/update", @z_options)
end
我的问题是,我不确定我是否正在执行我的控制器操作。我在 rake 任务中看到了 puts 消息,但我没有在控制器操作中看到 puts(但也许我不应该?)。
关于如何调试控制器中正在发生的事情的任何提示?
我通过将会话分配给一个变量然后显示它来调试它:
task :demote_sausages => :environment do
session = ActionDispatch::Integration::Session.new(Rails.application)
puts "this is the demote sausages task"
actions = UserAction.where action_date: Time.now.yesterday.strftime("%m/%d/%Y")
actions.each do |a|
var = session.post "/demote_sausage", {user_id: a.user_id}
puts var.inspect
end
end
这样做我可以看到该请求返回了 422 错误代码:无法验证 CSRF 令牌真实性已完成 422 无法处理。我对为什么抛出这个错误感到困惑。我认为 422 是从您的应用程序所在的域以外的域发出请求时 运行。在这种情况下,它都是本地主机。如果有人有好的答案,请添加为评论。
由于我在此处执行 post 请求,因此我需要跳过对身份验证令牌的检查。我是这样做的...
skip_before_action :verify_authenticity_token, :only => [:demote_sausage]
...在我的控制器中。