我刚刚在一个全新的Rails应用程序中运行了这段代码,安装了Delayed::Job(根据您提供的内容进行了修改):
class List
attr_accessor :id
end
@list = List.new
@list.id = 123
class ImportContact
def initialize(list_id, csv_text)
@list_id = list_id
@csv_text = csv_text
end
def perform
puts @list_id
puts @csv_text.length
end
end
csv_text = IO.read('test_2000_import_contacts.csv', :encoding => 'UTF-8').gsub(" ", "")
csv_text = csv_text.gsub("\n\n", "\n")
Delayed::Job.enqueue ImportContact.new(@list.id, csv_text), :queue => "import-list-#{@list.id}"
当我跑步的时候
bundle exec rake jobs:work
,一切都进行得很正确,这会让我相信YAML对您正在导入的文件进行编码或解码的方式存在问题。
特别是,我会跑步
yaml = Delayed::Job.find(121).handler
File.open('job-121.yml', 'w') { |f| f.write(yaml) }
并检查周围的文件
line 6709 column 4
.
然而,现在可能是建议您将文件存储在类似S3的文件中,并将URL传递给
ImportContact
工作者,而不是整个CSV文本。这将缓解您当前遇到的问题,并帮助您避免数据库中出现大量文本列。