2013-11-27 2 views
2

내 애플에게 Heroku에 내가 Excel 스프레드 시트에서 연락처를 가져올 수 있습니다 내 응용 프로그램의 엑셀방법은 두 가지 작업 사이에 임시 파일을 유지하는

사용자의 수입에서 리소스를 만드는거야. 가져 오기를 수행하는 과정은 사용자의 두뇌를보다 쉽게 ​​만들기 위해 여러 단계로 이루어져 있습니다. 첫 번째 단계에서는 파일 (스프레드 시트)을 업로드합니다. 두 번째 단계에서는 파일을 처리 할 수있는 몇 가지 옵션을 선택합니다. 옵션은 파일 헤더에 따라 다르므로이 두 단계를 하나로 결합 할 수 없습니다.

지금이 작업은 파일을 업로드하는 POST와 사용자의 선택을 업로드하는 또 다른 POST의 두 가지 작업으로 수행됩니다. 임시 파일로 인스턴스화 된 파일은 작업 전체에서 유지되지 않습니다.

그래서 사용자가 중간 작업에서 첫 번째 파일을 다시 업로드하지 못하도록하고 싶습니다. 이것이 가능한가?

첫 번째 단계 :이 두 번째 단계에서

= simple_form_for [:choose_headers, @contact_import] do |f| 
    = f.input :file, as: :file 
    = f.submit 

이 파일은 유지되지 않습니다 :

= simple_form_for [@contact_import] do |f| 
    = f.input :file, as: :file 
    = f.input :some_other_input 
    = f.submit 

답변

3

Tempfile를 사용하지 마십시오. 업로드 된 데이터에 대한 고유 한 파일 이름을 생성하고 파일을 특수 디렉토리에 저장하십시오. (만약 Capistrano를 배포에 사용한다면, 프로덕션 환경에 배포 할 때 업로드 디렉토리를 shared 아래에 넣을 것입니다. 이미 존재하지 않으면 config/deploy.rb에서 upload 디렉토리를 생성하는 deploy hook을 추가 할 것입니다. 업로드 config/environments/production.rbconfig/environments/development.rb의 설정 값을 사용하여 디렉토리, 그래서 모든 경로는 DEV과 생산 모두에서 완벽하게 작동합니다. 내 컨트롤러 액션에서, 내가 업로드 된 파일에 대한 올바른 경로를 구축 File.join(Rails.root, UPLOAD_PATH, filename) 같은 것을 할 것입니다.)

생성 된 파일 이름을 데이터베이스에 저장하고 사용자가 두 번째 단계로 돌아 왔을 때 검색합니다. 또한 사용한 적이없는 이전 업로드를 정리하는 사용자 정의 rake 작업을 추가하고 프로덕션에서는 cron 작업에서 해당 작업을 실행하십시오. (cron 작업을 구성하는 데 whenever 보석을 사용하는 것이 좋습니다.

+0

내 솔루션이 Heroku에 있고 S3에 파일을 저장하고 싶지 않기 때문에 솔루션을 사용할 수 있지만 파일을 저장하지 않습니다. –

+0

Heroku는 파일 시스템에 기록 된 모든 파일을 유지하지 않을 것을 명시 적으로 명시하고 있습니다. 그것은'Tempfile' 또는 다른 것을 사용하든 변경되지 않습니다. S3를 사용하는 것 외에 다른 신뢰할 수있는 유일한 해결책은 파일 내용을 데이터베이스에 BLOB으로 저장하는 것입니다. –

+0

그게 내가 생각하고 있었던거야. 나는 네가 언급 한 것처럼 그것을 블롭으로 저장할 것이라고 생각한다. –

관련 문제