2017-02-25 20 views
1

私はdjango-import-exportを使用して、私のDjango管理サイトにアップロードされたCSVファイルを処理しています。Herokuでのdjango-import-exportのTmpfileエラー

ローカルマシンでDjangoを実行すると、正常に動作します。

Feb 24 14:35:12 test-staging app/web.3: ERROR 2017-02-24 22:35:12,143 base 14 139687073408832 Internal Server Error: 
.... 
Feb 24 14:35:12 test-staging app/web.3: File "/app/.heroku/python/lib/python2.7/site-packages/import_export/admin.py", line 163, in process_import 
Feb 24 14:35:12 test-staging app/web.3:  data = tmp_storage.read(input_format.get_read_mode()) 
Feb 24 14:35:12 test-staging app/web.3: File "/app/.heroku/python/lib/python2.7/site-packages/import_export/tmp_storages.py", line 42, in read 
Feb 24 14:35:12 test-staging app/web.3:  with self.open(mode=mode) as file: 
Feb 24 14:35:12 test-staging app/web.3: File "/app/.heroku/python/lib/python2.7/site-packages/import_export/tmp_storages.py", line 31, in open 
Feb 24 14:35:12 test-staging app/web.3:  return open(self.get_full_path(), mode) 
Feb 24 14:35:12 test-staging app/web.3: IOError: [Errno 2] No such file or directory: u'/tmp/tmpvCUtrP' 

私は、これは動作するはずのように私はHerokuの一時的な保管については、それはそうすることができますどのようにアップ読んだ:私はHerokuのに自分のアプリケーションをデプロイすると

は、私がアクセスをTMPFILEに関連するエラーを取得を開始します。私はherokuを使ってheroku dynoの/ tmpにファイルを作成し、表示し、修正することができることを確認しました。

django-import-exportには、一時ファイル作成メカニズムのオーバーロードを許すモジュールがありますが、ここで何が間違っているのかはわかりません(なぜなら、/ tmp/tmpvCUtrPが作成されないか、見える)。

答えて

2

django-import-exportは、サーバへのいくつかの要求を渡ってインポートプロセスを分割します。

Herokuは、/ tmpに共通のファイルシステムを共有しない複数のdynosを使用できます。

最初のリクエストでdyno Aを取得し、/ tmp/tmpfilenameにtmpfileを作成してから、後でdyno Bに移動でき、django-import-exportに/ tmp/tmpfilenameを指定する必要があります。そうではありません。

from import_export.tmp_storages import CacheStorage 

class CustomAdminForm(ImportExportModelAdmin): 
    tmp_storage_class = CacheStorage 

は、この問題を回避するために、私はジャンゴ・輸出入するのCacheStorageの一時的な保管方法を切り替えます