2009-09-10 2 views
0

약 100,000 개의 레코드를 만들어야합니다. 이러한 레코드는 csv 파일에 있으며 create_fixtures 함수를 사용하여로드됩니다. 내 개발 컴퓨터에서 속도가 느리지 만 완료되었습니다. 문제는 프로세스마다 메모리 제한이있는 생산에서 시작되어 레이크 프로세스가 중단됩니다. create_fixtures가 모든 데이터를 메모리로 가져 오는 중입니다. 누구든지 작은 작은 덩어리를 가져 오도록 강요하는 방법을 알고 있습니까? (하나의 큰 CSV를 몇개의 작은 CSV로 잘라 내기 전에).Ruby on rails : create_fixtures 메모리 문제

답변

0

CSV를로드/파싱하는 방법은 무엇입니까? Ruby의 File 유틸리티를 사용하여 모든 행을 읽고 읽고 구문 분석 할 수 있다고 생각합니다.

1

하지 마세요!

create_fixtures는 기능을 실행하는 데 필요한만큼 큰 테스트 데이터를로드하도록 설계되었습니다. 프로덕션 (또는 다른 종류의) 데이터베이스에 수천 개의 레코드를로드하기위한 것이 아닌 입니다. 일회성이라면 OK 일지 모르지만 보통의 일로는 나를 긴장시킬 것입니다. 데이터가 나는 간단한 String#split 일하는 것이 의미하는, 아주 간단 경우

, 그 다음은 아마 당신의 접근 방식, 그렇지 않으면

File.foreach(csv_file_path) do |line| 
    fields = line.split(/,/) 
    # create records from the array of fields 
end 

같은 무언가가 있어야합니다 (따옴표 또는 쉼표로 문자열 값을 가질 수있다 즉, , 누락 된 필드 값 또는 여러 레코드 형식, 그런 종류의 것)은 이미 을보고 있어야합니다.이 부분은 이미 Ruby 1.8.6 설치의 일부이거나 더 나은 것은 1.9 이후 버전의 CSV를 대체하는 FasterCSV Gem입니다.

UPDATE : 편리하게도, 라이언 베이츠 씨 데이터의 성가신 주제에 단지 posted a screencast ...

+0

나는 그것이 국가와 같은 일부 데이터에 대한 생산 설비 (예를 들어 어떤 검증을), (로드 나쁜 관행이 있다고 이해하지만/cities/etc ...) 필수 항목입니다. 나는 여기에 멋진 dicussion을 발견했다 : http://railspikes.com/2008/2/1/loading-seed-data (fixture 메모리 문제는 아니지만 사람이 시딩 프로덕션을 처리하는 방법을 찾는다.) –

+0

어쩌면 나는 다른 부품. 나는 이것이 "데이터를 검증하지 않기 때문에 조명기를 좋아하지 않는다"고 본다. 해당 게시물에 대한 주석은 ar 확장을 언급하며 DB 대량 쓰기 속도가 중요한 경우에 유용합니다. 나는 씨앗 데이터에 대한 필요성에 대해 멍청이를 짓지 않고있다. (당신이하려는 것은 모두 다 - 질문은 분명하지 않다.) 나는 단지 무언가를 위해 조명기를 사용하려고 시도하는 것을 포기한다면 더 나아질 것이라고 생각한다. 그것을 위해 설계되지 않았습니다. –