在视图中的模型中保存文件有效,但在 Celery 任务中无效

2024-02-05

我遇到了这种非常奇怪的行为,当我在视图中保存新的模型实例时,分配的文件会被保存,但是当我在 Celery 中这样做时,实例会被保存,但文件不会被保存。

这些是我的观点(缩短):

def post(self, request, *args, **kwargs):
    [...]
    html = render_to_string('pdf/w_html.html', {'request': self.object})
    out = BytesIO()
    HTML(string=html).write_pdf(out, stylesheets=[CSS(settings.STATIC_ROOT + "/css/pdf.css"), 
                                                  'https://fonts.googleapis.com/css2?family=Montserrat&family=Playfair+Display&display=swap'])
    document = Document(product=product, document_type=4,
                        language=1, date=timezone.now().date(),
                        file=File(out, name='Best_Execution_Report.pdf'))
    document.save()

其中 self.object 是 Request 实例。 上面的代码完全完成了它应该做的事情(即保存模型和生成的 pdf)。

但是一旦我将上面的代码修改为这样:

def post(self, request, *args, **kwargs):
    [...]
    generate_best_execution_report.apply_async(kwargs={'request_id': self.object.pk})

执行以下 celery 任务:

@shared_task
def generate_best_execution_report(request_id):
    """Task to automatically generate best execution Reports and save it to the Documents Model (of the product app)."""
    request_obj = Request.objects.get(pk=request_id)
    logger.info(request_obj)
    html = render_to_string('pdf/w_html.html', {'request': request_obj})
    logger.info(html)
    out = BytesIO()
    HTML(string=html).write_pdf(out,
                                stylesheets=[
                                    CSS(settings.STATIC_ROOT + "/css/pdf.css"),
                                    'https://fonts.googleapis.com/css2?family=Montserrat&family=Playfair+Display&display=swap'
                                ]
                                )

    logger.info(out)
    with transaction.atomic():
        document = Document(product=request_obj.product, document_type=4,
                            language=1, date=timezone.now().date(),
                            file=File(out, name='Best_Execution_Report.pdf'))
        try:
            document.save()
        except Exception as e:
            logger.info(e)

    logger.info(document)
    return True

(请注意,请求是产品上的一对一关系,因此我必须稍微更改 Document 实例的生成方式)

实例将被保存(文档的路径也是正确的!不会引发异常),但文件本身不会被保存。

我缺少什么?


我发现了这个问题。整个App运行在Docker环境中。 Django 应用程序和 Celery 已在单独的容器中运行。问题是 Celery 无法访问 Django 文件系统,因此文件被保存,但无法访问 Django 容器......非常愚蠢的错误,但花了我几天时间才弄清楚。因此,如果有人遇到同样的问题,请检查您的 docker 卷。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在视图中的模型中保存文件有效,但在 Celery 任务中无效 的相关文章

随机推荐

  • AttributeError:模块“numpy”没有属性“__version__”

    我今天更新了计算机 当我尝试导入 pandas 时收到以下错误消息 import pandas as pd AttributeError module numpy has no attribute version 我已尝试以下链接中的建议
  • 如何从 OneDrive 下载文件

    我想从 One Drive 下载公共文件夹中的文件 但它不下载这些文件 这是场景 在公共文件夹中 我有另一个文件夹 其中包含多个文件 并且可以广泛访问 出于测试目的 我共享了公共文件夹中的所有文件 如果这是正确的共享方式 我不会共享 以下链
  • laravel 5.2 将数据传递到注册视图

    我正在使用 laravel 5 2 我编写了以下命令来自动添加身份验证的路由和视图 php artisan make auth 现在我想将数据传递到注册视图 但我找不到在哪里执行此操作 我认为应该使用如下代码 Route get regis
  • 停止重复 UIView 动画块?

    我有一个 UIView 动画块 它使用UIViewAnimationOptionRepeat UIViewAnimationOptionAutoReverse选项 因此它会继续进行 但在某些时候我需要停止动画 但更重要的是停止它并使视图返回
  • Angular 中使用 rxjs 的用户通知服务?

    我对反应式编程比较陌生 我正在尝试创建一个可以向用户显示通知的 Angular 服务 到目前为止 这就是我所拥有的 https stackblitz com edit angular rxjs notifications file app
  • 当半径增加时如何在 CLLocationManager 中为区域绘制固定圆

    我有一个要求 我必须在 CLLocationManager 中为区域绘制一个圆圈 我已经完成了本准则的要求 CLLocationDegrees latitude 37 33492222 CLLocationDegrees longitude
  • 如何在android中使用XMLStreamWriter编写XMl文件

    我想创建 XML 文件 这是我的以下代码 String fileName jasstech xml XMLOutputFactory xof XMLOutputFactory newInstance XMLStreamWriter xtw
  • glPopMatrix() 喊叫“setup_hardware_state 中不支持纹理格式”

    我正在尝试对 Linux 的私人视频播放器进行一些优化 旨在提高性能 因为播放 MP4 文件对 CPU 的占用很大 自从视频帧采用 YV12 编码并且 OpenGL 不提供显示此格式的本机方法 现在有一段代码在CPU上运行 在将图像发送到G
  • Mongoose - 使用聚合返回单个文档而不是文档数组

    在开始使用聚合来创建文档的时间戳之前 我使用 findOne 这样我可以获得单个对象 但现在我得到一个包含单个对象的数组 是否可以使查询返回单个对象而不是数组 先感谢您 我正在使用的查询 News aggregate match id n
  • 如何使用元数据注释在 Dart 分析器中提供警告消息?

    我创建了一个像这样的元数据注释 class UseInt const UseInt UseInt class Foo Should give a lint warning saying The class should only use i
  • 防止 MEX 文件在 MATLAB 中崩溃

    我有一个 MEX 文件 是我从别人那里 借来 的 用来帮助我编写半自动核检测算法 问题是 MEX 文件偶尔会导致分段错误 但是 如果代码第二次使用相同的参数运行 那就没问题了 我希望有一种try catchMEX 文件的习语 但在周六花了大
  • android 退出时清除应用程序缓存

    我想要做的是在应用程序退出时清除应用程序的缓存 我可以通过以下步骤手动完成此任务 管理应用程序 gt 我的应用程序 gt 清除缓存 gt gt 但我想通过在应用程序退出时编程来完成这项任务 请帮助我 提前致谢 要清除应用程序数据 请尝试这种
  • 使用 Microsoft Graph 查询 AzureAD Graph 扩展属性

    我正在从 Azure AD Graph API 迁移到 Microsoft Graph 因为它现已弃用 以前可以使用以下方式访问用户的扩展属性Microsoft Azure ActiveDirectory GraphClient GetEx
  • 实体框架将两个表列映射到同一相关表键

    我的情况是 我有一张名为Elements 现在我正在创建一个名为Divergences基本上会存储成对的Elements 的目的Divergence是检查是否有两个Elements有不同的答案 Element Divergence Elem
  • 如何检查列表中的所有元素是否符合条件?

    我有一个列表 其中包含许多子列表 每个子列表包含 3 个元素 例如 my list a b 0 c d 0 e f 0 每个子列表的最后一个元素是一个排序标志 每个子列表的初始值为 0 随着我的算法的进展 我想检查该标志是否至少有一个元素为
  • 在 Inno Setup 中禁用静默和非常静默卸载

    是否可以在 Inno Setup 中禁用静默和非常静默卸载 您不能直接禁用它 但您可以检查它是否以静默模式运行并在运行期间显示消息 退出InitializeSetup InitialiseUninstall 事件函数 function In
  • Maven 结构和 Java EE 应用

    如何在 Java EE 应用程序中组织 Maven 模块 目前我们所做的是在父 POM 下拥有以下 Maven 模块 ear ejb ejb api core The ejb模块仅包含 EJB 类 而core模块包含所有其他实用程序类 包括
  • 如何以编程方式获取有关 CellTable 标头的信息?

    我正在使用 GWT 2 4 我有一个 com google gwt user cellview client CellTable 小部件 但我无法找出在构造小部件后获取字符串标头的编程方法 我像这样添加列数据 tableWidget add
  • 标记上出现语法错误,需要使用variableDeclarator

    SQLiteDatabase db this getWritableDatabase ContentValues cv new ContentValues cv put colDeptID 1 cv put colDeptName Sale
  • 在视图中的模型中保存文件有效,但在 Celery 任务中无效

    我遇到了这种非常奇怪的行为 当我在视图中保存新的模型实例时 分配的文件会被保存 但是当我在 Celery 中这样做时 实例会被保存 但文件不会被保存 这些是我的观点 缩短 def post self request args kwargs