我在/lib/tasks/scriping.rake
namespace :scriping do
task :list => :environment do
client = CloudscrapeClient.new
Robot.all.each do |robot|
execution_id = client.runs(robot.list_run_id).execute(connect: true)
end
end
我在控制器中试过这段代码。但它没有用。
Tasks::scriping.execute
在控制台中运行此命令时,它可以正常工作!
bundle exec rake scriping:list
如何从控制器
调用任务:列表此任务答案 0 :(得分:3)
最佳解决方案是将共享代码移动到类中!
# app/services/cloud_scrape_client_runner.rb
class CloudScrapeClientRunner
def self.perform
client = CloudscrapeClient.new
Robot.all.each do |robot|
execution_id = client.runs(robot.list_run_id).execute(connect: true)
end
end
end
然后确保您正在加载该文件夹
# in config/application.rb:
config.autoload_paths << Rails.root.join('services')
然后在你的佣金任务中:
namespace :scriping do
task :list => :environment do
CloudScrapeClientRunner.perform
end
end
并在您的控制器中:
class FooController < ApplicationController
def index
CloudScrapeClientRunner.perform
end
end
WHY!?!
因为我猜测CloudScrapeClientSomething
是懒惰的,你想要异步地做。
你想要什么:点击链接,让它触发控制器启动任务。
您不想要的内容:点击该链接,让整个应用程序冻结,直到任务完成。