Django中的文件写入持续存在IOError

时间:2017-04-15 07:54:26

标签: django file-writing celery-task

我在本地运行我的应用程序,而且我在从数据库创建文件时遇到IOError。我使用Django 1.10,MongoDB作为我的数据库,使用Celery 4.0.2作为我的后台任务。问题发生在tasks.py中,因为那是我访问数据库然后将其存储在我的django子文件夹'analysis_samples'中。

这是追溯:

[2017-04-15 15:31:08,798: ERROR/PoolWorker-2] Task tasks.process_sample_input[0619194e-4300-4a1d-91b0-20766e048c4a] raised unexpected: IOError(2, 'No such file or directory')
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 367, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 622, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/user/django_apps/myapp/analysis/tasks.py", line 218, in process_sample_input
    with open(sample_file_path, "w+") as f:
IOError: [Errno 2] No such file or directory: u'/home/user/django_apps/myapp/myapp/analysis_samples/58f1cc3c45015d127c3d68c1'

以下是tasks.py:

的片段
from django.core.files import File
sys.path.append(settings.ANALYSIS_SAMPLES)
import base64
import os, sys

@shared_task(name='tasks.process_sample_input')
def process_sample_input(instance_id):
    instance = Sample.objects.get(pk=instance_id)
    #many code here..
    try:
        conn=pymongo.MongoClient(settings.MONGO_HOST, settings.MONGO_PORT)
        db = conn.thugfs #connect to GridFS db of thug
        thugfs_db = GridFS(db)
    except pymongo.errors.ConnectionFailure, e:
        logger.error("Could not connect to ThugFS MongoDB: %s" % e)

    sample_file_folder = settings.ANALYSIS_SAMPLES
    for sample_fs_id in sample_fs_ids:
        sample_file = thugfs_db.get(ObjectId(sample_fs_id)).read()
        sample_file = base64.b64decode(sample_file) #decode file from database
        sample_file_path = os.path.join(sample_file_folder, sample_fs_id)
        with open(sample_file_path, "w+") as f:
            fileOut = File(f)
            fileOut.write(sample_file)

settings.py:

ANALYSIS_SAMPLES = os.path.join(BASE_DIR, 'myapp/analysis_samples')

任何人都可以看到导致错误的重点吗?任何帮助将不胜感激。

0 个答案:

没有答案