gpt4 book ai didi

mysql - 如何在 rails 应用程序中将大型 csv 文件导入 mysql?

转载 作者:行者123 更新时间:2023-11-29 06:44:31 25 4
gpt4 key购买 nike

我正在 rails 应用程序中将 csv 数据导入 mysql。我使用 CSV.parse 在 csv 文件中逐行读取并导入数据库。这种方式效果很好。


但是,当我部署到 Heroku 服务器时,每个请求的超时为 30 秒。如果导入 csv 文件超过 30 秒。 Heroku 服务器有错误:请求超时 - H12。有人帮我找出导入大型 csv 文件的最佳方法吗?现在,我只导入包含 70 个用户的小型 csv。我想导入包含 500 - 1000 个用户的大型 csv。这是代码:

导入 Controller :

CSV.foreach(params[:file].path, :headers => true) do |row|
i = i + 1

if i == 1
@company = Company.find_or_create_by!(name: row[0])
end

@users = User.find_by(email: row[1])

if @users
if @company.id == @users.employee.company_id
render :status=> 401, :json => {:message=> "Error"}
return
else
render :status=> 401, :json => {:message=> "Error"}
return
end
else
# User
# # Generate password
password = row[2]
user = User.new(email: row[1])
user.password = password.downcase
user.normal_password = password.downcase
user.skip_confirmation!
user.save!

obj = {
'small' => 'https://' + ENV['AWS_S3_BUCKET'] + '.s3.amazonaws.com/images/' + 'default-profile-pic_30x30.png',
'medium' => 'https://' + ENV['AWS_S3_BUCKET'] + '.s3.amazonaws.com/images/' + 'default-profile-pic_40x40.png'
}

employee = Employee.new(user_id: user.id)
employee.update_attributes(name: row[3], job_title: row[5], gender: row[9], job_location: row[10], group_name: row[11], is_admin: to_bool(row[13]),
is_manager: to_bool(row[14]), is_reviewee: to_bool(row[6]), admin_target: row[7], admin_view_target: row[12], department: row[8],
company_id: @company.id, avatar: obj.to_json)
employee.save!

end
end

我尝试使用 gems 'activerecord-import' 或 'fastercsv' 但 'activerecord-import' 不起作用,'fastercsv' 不适用于 ruby​​ 2.0 和 rails 4.0

最佳答案

在 Controller 中执行此操作对我来说似乎有点过分,尤其是因为它是阻塞的。您是否考虑过将其放入后台作业?

如果我是你,我会:

  1. 上传文件
  2. 在后台将其解析为 rake 任务

另外,看看:https://github.com/tilo/smarter_csv

关于mysql - 如何在 rails 应用程序中将大型 csv 文件导入 mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com