【发布时间】:2015-08-10 12:37:13
【问题描述】:
我正在使用后台作业将用户数据从 csv 文件导入到我的数据集中。首先,我在我的用户模型中通过简单地调用我的用户模型中的一个方法并通过传递通过file_field 表单传输的文件路径来在我的用户模型中做到这一点:
User.import_csv(params[:file].path)
在本地和生产环境 (heroku) 上运行良好。
现在,当涉及到巨大的 CSV 文件时,我明白我需要一份工作来在后台执行此导入。我熟悉 redis 和 sidekiq,所以很快就完成了。
CsvImportJob.perform_async(URI.parse(params[:file].path))
在我的工人中:
def perform(file_path)
User.import_csv(file_path)
end
嗯,这在本地也很完美,但是一旦我在生产环境中使用它,我就会在我的日志中看到以下错误:
» 10 Aug 2015 13:56:26.596 2015-08-10 11:56:25.987726+00:00 app worker.1 - - 3 TID-oqvt6v1d4 ERROR: Actor crashed!
» 10 Aug 2015 13:56:26.596 2015-08-10 11:56:25.987728+00:00 app worker.1 - - Errno::ENOENT: No such file or directory @ rb_sysopen - /tmp/RackMultipart20150810-6-14u804c.csv
» 10 Aug 2015 13:56:26.596 2015-08-10 11:56:25.987730+00:00 app worker.1 - - /app/vendor/ruby-2.2.2/lib/ruby/2.2.0/csv.rb:1256:in `initialize'
这是file_path 变量。
不知何故,当我将文件传递给 sidekiq 作业时,heroku 无法找到该文件。当我在没有 sidekiq 的情况下执行此操作时,它可以工作。
我真的不知道如何解决这个问题,因此感谢任何帮助。
【问题讨论】:
标签: ruby-on-rails heroku sidekiq