설치
이후 성공적으로 전송 될 수있다 4.2.0에 여러 버전을 시도 셀러리 ==에게 4.2.0 #의 celery4.x 지원을 django1.11 설치 PIP
1. 새 프로젝트 디렉토리 셀러리 패키지 celery_tasks 만들기
에서 tasks.py
에서 django.conf 가져 오기 설정 에서 django.core.mail 가져 send_mail 에서 셀러리 가져 오기 셀러리 #의 가져 오기 셀러리 패킷 #을 만들기 클래스 인스턴스 객체 셀러리 #의 셀러리 (이름 (일반적으로 작성된 패키지 이름), 중개인 파산) 응용 프로그램 = 셀러리 ( ' celery_tasks을 .tasks ' , 브로커 = ' 레디 스 : //192.168.199.130 : 2분의 6,379 ' ) # 2는 두 번째 데이터베이스 사용 #은 작업 기능 정의 @의 app.task의 #을 장식 필수 DEF의 send_register_active_email을 (to_email, 사용자 이름, 토큰) : # '' '활성화 이메일을 보내' '' # 메일 메시지의 구성 #을 메일 보내기 제목 = ' 매일 신선한 환영 메시지 ' #의 메시지 주제 # 메시지 본문 #의 참고 : 여기에 html 태그 문자열 출력로서 해석 할 수없는 것입니다 # 메시지 = '를 <H1> S % 당신이 매일 등록 된 회원이되도록 환영합니다, 신선한 </ H1> 계정을 활성화하려면 다음 링크를 클릭 : <BR/> <a href="http://192.168.199.130:8000/user/active/%s"> HTTP : //192.168.199.130 : 8000 / 사용자 / 액티브 / S % </a>를 '% (이름, 토큰, 토큰) 메시지 = ' 발신자 = settings.EMAIL_FROM # 발송 수신기 = to_email] #에 받는 목록 html_message = '<H1> %의, 신선한 </ H1> 계정을 활성화하려면 다음 링크를 클릭 <BR/> <A HREF = "당신은 매일 등록 된 회원이 환영 http://192.168.199.130:8000/user/active/% S "> http://192.168.199.130:8000/user/active/%s </a>를 ' % ( 사용자 이름, 토큰, 토큰) 인쇄 (html_message) # 가까운 send_mail (메시지 제목, 메시지 본문, 보낸 사람, 목록, html_message = HTML 형식의 내용) 누구 #의 send_mail (주제, 메시지, 발신자, 수신자) send_mail (주제, 메시지, 보낸 사람, 수신기, html_message = html_message)
라인에보기 2. 가져 오기 기능 작업 패키지
에서 celery_tasks.tasks 가져 오기 send_register_active_email #의 셀러리 이메일 도입의 방법 #을 메일 보내기 # 지연 (받는 사람, 사용자 이름 토큰) (이메일, 사용자 이름, 토큰에서) send_register_active_email.delay를 # 대기열에 작업을
3. 시작 레디 스
셀러리 명령 실행
셀러리 -A는 노동자 -l 정보를 celery_tasks.tasks
오류
- : 파이썬 @ 우분투는 ~ / bj19 / ttsx / dailyfresh $ 셀러리 -A는 노동자 celery_tasks.tasks 리터 정보 : 역 추적 (가장 최근 통화 마지막) 파일 " 은 / usr / local / bin / 셀러리 " , 라인 11 에 <모듈> SYS .exit은 (주 ()) 파일 " /usr/local/lib/python3.5/dist-packages/celery/__main__.py " , 라인 16 의 주요 _main () 파일 " / usr / 지방 / lib 디렉토리 / python3을. 5 / DIST-패키지 / 셀러리 / 빈 / celery.py " , 라인 (322) 의 주요 cmd.execute_from_commandline (변수는 argv) 파일 "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py " , 라인 496 에 execute_from_commandline 슈퍼 (CeleryCommand, 자기) .execute_from_commandline (ARGV))) 파일 " 를 / usr / local / lib로 /python3.5/dist-packages/celery/bin/base.py " , 라인 298 에 execute_from_commandline 복귀 self.handle_argv (self.prog_name,는 argv [1 :]) 파일 " /usr/local/lib/python3.5 /dist-packages/celery/bin/celery.py " , 라인 488 에 handle_argv의 반환 self.execute (명령, 변수는 argv) 파일 "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py " 라인 (420), 의 실행 ) .run_from_argv (self.prog_name,는 argv [ 1] = 명령어 는 argv [0]) 파일 " /usr/local/lib/python3.5/dist-packages/celery/bin/worker.py " , 라인 (223) 에 run_from_argv의 반환 자체 (* 인수, ** 옵션) 파일 " / usr / 지방 / lib 디렉토리 / python3.5 / DIST-패키지 / 셀러리 / 빈 / base.py " , 라인 252 에 __call__ RET = self.run (* 인수, ** kwargs로) 파일 "/usr/local/lib/python3.5/dist-packages/celery/bin/worker.py " 라인 257, 에서 실행 ** kwargs로는) 파일 " /usr/local/lib/python3.5/dist-packages/ 셀러리 / 노동자 / worker.py " , 라인 (101) 의 __init__ self.setup_instance ( ** self.prepare_args (** kwargs로는)) 파일 " /usr/local/lib/python3.5/dist-packages/celery/worker/ worker.py " , 라인 (124) 에 setup_instance의 self.should_use_eventloop () 경우 use_eventloop가 있다 없음 파일 "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py " , 라인 243 에 should_use_eventloop의 self._conninfo.transport.implements.asynchronous 및 파일 " / usr / 지방 / lib 디렉토리 / python3. 5 / DIST-패키지 / 다시마 / connection.py " , 라인 871 에 전송 self._transport = self.create_transport () 파일 " /usr/local/lib/python3.5/dist-packages/kombu/connection.py " 라인 598 에서 create_transport의 반환 self.get_transport_cls () (클라이언트 = 자기) 파일 "/usr/local/lib/python3.5/dist-packages/kombu/transport/redis.py " , 라인 1039 에서 __init__는 인상 (ImportError를을 ' 레디 스 라이브러리를 누락 () 레디 스를 설치 PIP ' ) (누락 레디 스 라이브러리 핍 : ImportError를을 레디 스를 설치)
핍은 레디 스를 설치하지 않은 때문이다
설치 구성 요소 레디 스
설치 PIP -U " 셀러리 [레디 스] "
명령을 다시 노크
메일을 보낼 때 오류가 계속
[2019년 9월 25일 17 : 41 : 28,074 : INFO / MainProcess]받은 태스크 : celery_tasks.tasks.send_register_active_email [58be8ac2-4deb-4ca1-809b- 6a88e9a2fc9f] [ 2019년 9월 25일 17 : 41 : 28,085 : ERROR / ForkPoolWorker -2] 작업 celery_tasks.tasks.send_register_active_email [58be8ac2-4deb-4ca1-809b-6a88e9a2fc9f]를 제기 예기치 않은 : ImproperlyConfigured ( ' . EMAIL_FROM 설정을 요청하지만, 설정이 구성되지 않은 당신은 환경 변수 DJANGO_SETTINGS_MODULE를 정의해야 하나 또는 (settings.configure 전화 ) 설정에 액세스하기 전에. ' ) 마지막 역 추적 (가장 최근의 호출) : 파일 " /home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py " , 라인 (382) ...에서trace_task R = RETVAL = 재미 (* 인수는, ** kwargs로는) 파일 " /home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py " , 라인 641 에 __protected_call__ 반환 self.run을 (** * 인수, kwargs로는) 파일 " /home/python/bj19/ttsx/dailyfresh/celery_tasks/tasks.py을 " , 라인 24 에서 send_register_active_email 보낸 = settings.EMAIL_FROM # 发件人 파일 " / 집 /python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py " , 라인 (48) 에 __getattr__ self._setup (이름) 파일 " /home/python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py " , 라인 (42) 에 _setup의 % (내림차순, 환경 변수 _)) django.core.exceptions.ImproperlyConfigured : EMAIL_FROM 설정을 요청하지만, 설정이되어 있지 구성. 당신은 환경 변수 DJANGO_SETTINGS_MODULE를 정의해야 하나 또는 설정에 액세스하기 전에 () settings.configure를 호출합니다.
장고 인해 초기화되지 않았습니다
tasks.py 초기화 파일에서
가져 오기 운영 체제 가져 오기 장고 os.environ.setdefault ( " DJANGO_SETTINGS_MODULE는 " , " dailyfresh.settings " ) #은 이상에 wsgi.py 복사 ) (django.setup
시험은 다시 성공적으로 전송