Я пытаюсь добавить пользовательское имя в файл на основе объекта, для которого он вызывается в WickedPDF. Это отлично работало как действие контроллера, но как только он работает в Sidekiq, он не может сказать, что нет метода name
для объекта Issueable (polymorphic), который возвращается в виде строки (и это, вероятно, является причиной всех моих проблем) там, но я не знаю, как обойти это).
соответствующая строка:
save_path = Rails.root.join('public', "#{@issueable.name}_checklist.pdf")
Точная ошибка в контексте из вывода консоли Sidekiq:
2019-01-15T02:36:46.194Z 10080 TID-oxwns2nmk GenerateChecklistWorker JID-cefb15a101c80e1c8727b646 INFO: start
"***************[\"/Users/jathayde/.rbenv/versions/2.5.2/bin/wkhtmltopdf\", \"-q\", \"--dpi\", \"144\", \"--margin-top\", \"30\", \"--margin-bottom\", \"20\", \"--margin-left\", \"10\", \"--margin-right\", \"10\", \"--header-spacing\", \"5\", \"--footer-spacing\", \"0\", \"file:////var/folders/1b/9267f2s126q7c_8dztswqps40000gn/T/wicked_pdf20190114-10080-40sij4.html\", \"/var/folders/1b/9267f2s126q7c_8dztswqps40000gn/T/wicked_pdf_generated_file20190114-10080-kekkfo.pdf\"]***************"
2019-01-15T02:36:58.263Z 10080 TID-oxwns2nmk GenerateChecklistWorker JID-cefb15a101c80e1c8727b646 INFO: fail: 12.069 sec
2019-01-15T02:36:58.268Z 10080 TID-oxwns2nmk WARN: {"context":"Job raised exception","job":{"class":"GenerateChecklistWorker","args":["#<Lodge:0x00007fcdb8cc86b0>",["#<Issue:0x00007fcdc267ea70>","#<Issue:0x00007fcdc26c0a88>"],"#<Issue::ActiveRecord_AssociationRelation:0x00007fcdc22e1c28>"],"retry":false,"queue":"default","jid":"cefb15a101c80e1c8727b646","created_at":1547519806.182058,"enqueued_at":1547519806.18223},"jobstr":"{\"class\":\"GenerateChecklistWorker\",\"args\":[\"#<Lodge:0x00007fcdb8cc86b0>\",[\"#<Issue:0x00007fcdc267ea70>\",\"#<Issue:0x00007fcdc26c0a88>\"],\"#<Issue::ActiveRecord_AssociationRelation:0x00007fcdc22e1c28>\"],\"retry\":false,\"queue\":\"default\",\"jid\":\"cefb15a101c80e1c8727b646\",\"created_at\":1547519806.182058,\"enqueued_at\":1547519806.18223}"}
2019-01-15T02:36:58.268Z 10080 TID-oxwns2nmk WARN: NoMethodError: undefined method `name' for "#<Lodge:0x00007fcdb8cc86b0>":String
2019-01-15T02:36:58.268Z 10080 TID-oxwns2nmk WARN: /Users/jathayde/Development/Meticulous/Products/patchvault/app/workers/generate_checklist_worker.rb:30:in `perform'
Вот полный generate_checklist_worker.rb
:
class GenerateChecklistWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform(issueable, issues, event_issues)
@issueable = issueable
av = ActionView::Base.new()
av.view_paths = ActionController::Base.view_paths
av.class_eval do
include Rails.application.routes.url_helpers
include ApplicationHelper
end
pdf = av.render template: 'issues/checklist.pdf.erb',
locals: {:issueable => @issueable, :issues => @issues, :event_issues => @event_issues}
pdf = WickedPdf.new.pdf_from_string(
pdf,
disposition: 'attachment',
dpi: '144',
header: {html: {template: 'layouts/_checklist_header'}, spacing: 5 },
footer: {html: {template: 'layouts/_checklist_footer'}, spacing: 0 },
margin: {top: 30, bottom: 20, left: 10, right: 10},
locals: {:issueable => @issueable},
#cover: ApplicationController.new.render_to_string('issues/checklist_cover.pdf.erb'), locals: {:issueable => issueable}
)
save_path = Rails.root.join('public', "#{@issueable.name}_checklist.pdf")
File.open(save_path, 'wb') do |file|
file << pdf
end
end
end
Вот метод в контроллере, который вызывает это:
def checklist
@issues = @issueable.issues.kept.non_event_issues.ordered_issues
@event_issues = @issueable.issues.kept.event_issues.order(issue_number: :asc)
GenerateChecklistWorker.perform_async(@issueable, @issues, @event_issues)
redirect_to @issueable
end