Ruby on rails 延迟的工作记录赢了';不能执行延迟代码
我正在使用Ruby on rails 延迟的工作记录赢了';不能执行延迟代码,ruby-on-rails,ruby,delayed-job,Ruby On Rails,Ruby,Delayed Job,我正在使用delayed\u job\u active\u recordgem。我想延迟对外部API的请求。即使我的作业被添加到数据库中,并且rake jobs:work运行它并将其从数据库中删除,但我的messages\u controller.rb中的实际延迟代码永远不会执行 如果我从控制器方法中删除.delay,代码将按预期执行,测试全部通过 # messages_controller.rb require 'zendesk' class MessagesController <
delayed\u job\u active\u record
gem。我想延迟对外部API的请求。即使我的作业被添加到数据库中,并且rake jobs:work
运行它并将其从数据库中删除,但我的messages\u controller.rb
中的实际延迟代码永远不会执行
如果我从控制器方法中删除.delay
,代码将按预期执行,测试全部通过
# messages_controller.rb
require 'zendesk'
class MessagesController < ApplicationController
layout "application"
# /suport/contact-us
def contact_us
zendesk = MyApp::Zendesk.new
zendesk.delay.create_support_ticket(params[:message])
# render page
respond_to do |format|
flash[:notice] = "Email sent successfully!" if @sent
format.html { render "pages/support/contact-us" }
end
end
end
# zendesk.rb
require 'zendesk_api'
module MyApp
class Zendesk
attr_accessor :client
def initialize(*args)
@client = create_client
end
# contact-us ticket methods
def create_support_ticket(params={})
unless params.blank? || @client.blank?
# get or create user_id for submitter
params[:requester_id] = check_user_exists(params)
begin
ticket = @client.tickets.create(
subject: "Support Ticket",
comment: { value: params[:message] },
submitter_id: params[:requester_id],
requester_id: params[:requester_id],
assignee_id: 201578811,
status: "new",
fields: [
{id: 20887016, value: "Support"},
{id: 20966436, value: "New"}])
return ticket
rescue => e
Airbrake.notify e
end
else
return false
end
end
end
end
我尝试将
require'zendesk'
添加到config/initializers/custom.rb
,但错误仍然存在。我想您的create\u client
方法正在实例化Api对象。很可能Api实例无效,因为运行延迟作业的进程是异步的
也就是说,您应该在create\u support\u ticket
中创建一个新的Zendesk Api实例。
比如
我已经发布了该问题的更新,但我认为您是正确的,这也是一个问题。
模块MyApp
是否位于单独的.rb文件中?如果没有,您应该在/lib/my_app.rb中创建它,并在application.rbyes中需要lib,模块MyApp
在/lib/my_app.rb
中,并且lib
已经自动加载了config.autoload_路径+=%W(#config.root}/lib)
在application.rb
Delayed::DeserializationError: Job failed to load: undefined class/module MyApp::. Handler: "--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/object:MyApp::Zendesk\n client: !ruby/object:ZendeskAPI::Client\n config: !ruby/object:ZendeskAPI::Configuration\n client_options: {}\n cache: !ruby/object:ZendeskAPI::LRUCache\n size: 1000\n store: {}\n lru: []\n url: https://REDACTED/api/v2\n username: REDACTED\n password: REDACTED retry: true\n logger: !ruby/object:Logger\n progname: \n level: 0\n default_formatter: !ruby/object:Logger::Formatter\n datetime_format: \n formatter: \n logdev: !ruby/object:Logger::LogDevice\n shift_size: \n shift_age: \n filename: \n dev: !ruby/object:IO {}\n mutex: !ruby/object:Logger::LogDevice::LogDeviceMutex\n mon_owner: \n mon_count: 0\n mon_mutex: !ruby/object:Mutex {}\n callbacks:\n - !ruby/object:Proc {}\n resource_cache: {}\nmethod_name: :create_support_ticket\nargs:\n- !ruby/hash:ActionController::Parameters\n name: ben\n email: myemail@aol.com\n reason: General\n message: test\n"
from /vendor/bundler/gems/delayed_job-4.0.0/lib/delayed/backend/base.rb:97:in `rescue in payload_object'
def create_support_ticket(params={})
@client = create_client
unless params.blank? || @client.blank?
...
end