#ruby-on-rails
#ruby-on-rails
Вопрос:
Я использую Ruby on Rails и пытаюсь использовать Sidekiq worker, но в какой-то момент я сталкиваюсь с проблемой, когда рабочий вызывает представление, представление вызывает беспокойство, а затем беспокойство не может обновить переменную в своей функции из-за ошибки FrozenString.
Например, вот как выглядит мой рабочий:
class ReportGeneratorWorker
include Sidekiq::Worker, ReportHelper
sidekiq_options queue: Rails.env.to_sym
def perform
ac_base = ApplicationController.new
body_html = ac_base.render_to_string template: "common/report_templates/generate_pdf.html.erb", layout: false
end
end
Опять же, представление вставляет текст, который использует проблему, но проблема не позволяет ему обновляться. Смотрите ниже, например:
[3] pry(#<#<Class:0x00007fec8ceea400>>)> html
=> "<ul>"
[4] pry(#<#<Class:0x00007fec8ceea400>>)> html.class.name
=> "String"
[5] pry(#<#<Class:0x00007fec8ceea400>>)> html << "Hello"
FrozenError: can't modify frozen String
from (pry):5:in `replacement_text'
Есть идеи, почему это происходит? Если я снова определю переменную из консоли Pry, то она действительно работает:
[1] pry(#<#<Class:0x0000557f07a25130>>)> html
=> "<ul>"
[2] pry(#<#<Class:0x0000557f07a25130>>)> html << "TEST"
FrozenError: can't modify frozen String
from (pry):2:in `replacement_text'
[3] pry(#<#<Class:0x0000557f07a25130>>)> html = "<ul>"
=> "<ul>"
[4] pry(#<#<Class:0x0000557f07a25130>>)> html << "TEST"
=> "<ul>TEST"
[5] pry(#<#<Class:0x0000557f07a25130>>)>
Ответ №1:
Я смог решить эту проблему, заменив <<
на =
.