데이터베이스에서 CSV 파일로 많은 양의 데이터를 내보내려고하는데 아주 오랜 시간이 걸리며 중요한 메모리 문제가 발생할 것을 두려워합니다.레일에서 거대한 CSV 내보내기로 인한 메모리 문제
메모리를 구축하지 않고 CSV를 내보내는 더 좋은 방법을 아는 사람이 있습니까? 그렇다면 어떻게 보여줄 수 있습니까? 감사.
def users_export
File.new("users_export.csv", "w") # creates new file to write to
@todays_date = Time.now.strftime("%m-%d-%Y")
@outfile = @todays_date + ".csv"
@users = User.select('id, login, email, last_login, created_at, updated_at')
FasterCSV.open("users_export.csv", "w+") do |csv|
csv << [ @todays_date ]
csv << [ "id","login","email","last_login", "created_at", "updated_at" ]
@users.find_each do |u|
csv << [ u.id, u.login, u.email, u.last_login, u.created_at, u.updated_at ]
end
end
send_file "users_export.csv",
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=#{@outfile}"
end
제안 된 솔루션에 따라 코드가 변경되었습니다 (마음에 들었는지 알려면 알려주세요).하지만 여전히 오랜 시간이 걸릴 것으로 보입니다. 더 이상 아이디어가 없습니까? 또한 내가 그것을 만들면서 CSV 파일을 스트리밍 할 수있는 방법을 알고 있습니까? 그걸하는 법을 찾지 못하는 것 같아 .. 고마워! –
참고 : 레일즈 3.0.9를 사용하고 있습니다. –