zoukankan      html  css  js  c++  java
  • celery开启worker报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE o

    其实挺简单的问题,但花了自己一个下午来解决,先是浏览各种博客,无果;没办法,然后去看celery官方文档,无果,近乎绝望,最后仔细看代码,找到问题所在(如下),自学狗这效率。。。。。。

    下面是自己task.py中的代码

    # 使用celery
    from django.conf import settings
    from celery import Celery
    from django.template import loader, RequestContext
    from goods.models import GoodsType, IndexGoodsBanner, IndexPromotionBanner, IndexTypeGoodsBanner
    import os
    
    
    # 在任务处理者一端加这几句
    import os
    import django
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
    django.setup()
    
    # 创建一个Celery类的实例对象
    app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/1')
    
    # 定义任务函数
    @app.task
    def generate_static_index_html():
        """产生首页静态页面"""
        # 获取商品的种类信息
        types = GoodsType.objects.all()
    
        # 获取首页轮播商品信息
        goods_banners = IndexGoodsBanner.objects.all().order_by('index')
    
        # 获取首页促销活动信息
        promotion_banners = IndexPromotionBanner.objects.all().order_by('index')
    
        # 获取首页分类商品展示信息
        for type in types:  # GoodsType
            # 获取type种类首页分类商品的图片展示信息
            image_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by('index')
            # 获取type种类首页分类商品的文字展示信息
            title_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by('index')
    
            # 动态给type增加属性,分别保存首页分类商品的图片展示信息和文字展示信息
            type.image_banners = image_banners
            type.title_banners = title_banners
    
        # 组织模板上下文
        context = {'types': types,
                   'goods_banners': goods_banners,
                   'promotion_banners': promotion_banners}
    
        # 使用模板
        # 1.加载模板文件,返回模板对象
        temp = loader.get_template('static_index.html')
        # 2.模板渲染
        static_index_html = temp.render(context)
    
        # 生成首页对应静态文件
        save_path = os.path.join(settings.BASE_DIR, 'static/index.html')
        with open(save_path, 'w') as f:
            f.write(static_index_html)

    当使用celery -A celery_tasks.tasks worker -l info开启worker时,出现标题所示的报错,

    错误原因:

    from goods.models import GoodsType, IndexGoodsBanner, IndexPromotionBanner, IndexTypeGoodsBanner

    这行代码应该写在环境配置后面,不然python解释器找不到goods模块,具体代码如下

    # 使用celery
    from django.conf import settings
    from celery import Celery
    from django.template import loader, RequestContext
    
    # 在任务处理者一端加这几句
    import os
    import django
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
    django.setup()
    
    from goods.models import GoodsType, IndexGoodsBanner, IndexPromotionBanner, IndexTypeGoodsBanner
    
    # 创建一个Celery类的实例对象
    app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/1')
    
    # 定义任务函数
    @app.task
    def generate_static_index_html():
        """产生首页静态页面"""
        # 获取商品的种类信息
        types = GoodsType.objects.all()
    
        # 获取首页轮播商品信息
        goods_banners = IndexGoodsBanner.objects.all().order_by('index')
    
        # 获取首页促销活动信息
        promotion_banners = IndexPromotionBanner.objects.all().order_by('index')
    
        # 获取首页分类商品展示信息
        for type in types:  # GoodsType
            # 获取type种类首页分类商品的图片展示信息
            image_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by('index')
            # 获取type种类首页分类商品的文字展示信息
            title_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by('index')
    
            # 动态给type增加属性,分别保存首页分类商品的图片展示信息和文字展示信息
            type.image_banners = image_banners
            type.title_banners = title_banners
    
        # 组织模板上下文
        context = {'types': types,
                   'goods_banners': goods_banners,
                   'promotion_banners': promotion_banners}
    
        # 使用模板
        # 1.加载模板文件,返回模板对象
        temp = loader.get_template('static_index.html')
        # 2.模板渲染
        static_index_html = temp.render(context)
    
        # 生成首页对应静态文件
        save_path = os.path.join(settings.BASE_DIR, 'static/index.html')
        with open(save_path, 'w') as f:
            f.write(static_index_html)
    

     此时使用celery -A celery_tasks.tasks worker -l info 就能正常开启worker了

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/jj1106/p/11093606.html
Copyright © 2011-2022 走看看