Запланированные задачи - выполняются без ошибок, но не дают никакого результата - Django PythonAnywhere
Я установил запланированное задание для ежедневного выполнения на PythonAnywhere.
В задании используется Django Commands, так как я обнаружил, что это предпочтительный метод для использования с PythonAnywhere.
Задачи не выдают ошибок, но я не получаю никакого вывода. 2022-06-16 22:56:13 -- Completed task, took 9.13 seconds, return code was 0.
Я пробовал использовать Print()
для отладки участков кода, но не могу получить никакого вывода ни в журнале ошибок, ни в журнале сервера. Даже после попыток print(date_today, file=sys.stderr)
.
Я установил путь для запланированной задачи как: (Не уверен, что это правильно, но, похоже, это единственный способ заставить его работать без ошибок)
workon advancementvenv && python3.8 /home/vicinstofsport/advancement_series/manage.py shell < /home/vicinstofsport/advancement_series/advancement/management/commands/schedule_task.py
Я пробовал установить путь, как показано ниже, но при попытке импорта из файла models.py возникает ошибка (я знаю, что это связано с относительным импортом, но не могу решить эту проблему). Traceback (most recent call last): File "/home/vicinstofsport/advancement_series/advancement/management/commands/schedule_task.py", line 3, in <module> from advancement.models import Bookings ModuleNotFoundError: No module named 'advancement'
2022-06-17 03:41:22 -- Completed task, took 14.76 seconds, return code was 1.
Есть идеи, как я могу заставить это работать? Все работает нормально локально, если я использую команду py manage.py scheduled_task, но не работает на PythonAnywhere.
Ниже приведен код задачи и структура приложения.
from django.core.management.base import BaseCommand
import requests
from advancement.models import Bookings
from datetime import datetime, timedelta, date
import datetime
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
from django.core.mail import send_mail
import os
from decouple import config
class Command(BaseCommand):
help = 'Sends Program Survey'
def handle(self, *args, **kwargs):
# Get today's date
date_today = datetime.datetime.now().date()
# Get booking data
bookings = Bookings.objects.all()
# For each booking today, send survey email
for booking in bookings:
if booking.booking_date == date_today:
if booking.program_type == "Sport Science":
booking_template_id = 'd-bbc79704a31a4a62a5bfea90f6342b7a'
email = booking.email
booking_message = Mail(from_email=config('FROM_EMAIL'),
to_emails=[email],
)
booking_message.template_id = booking_template_id
try:
sg = SendGridAPIClient(config('SG_API'))
response = sg.send(booking_message)
except Exception as e:
print(e)
else:
booking_template_id = 'd-3167927b3e2146519ff6d9035ab59256'
email = booking.email
booking_message = Mail(from_email=config('FROM_EMAIL'),
to_emails=[email],
)
booking_message.template_id = booking_template_id
try:
sg = SendGridAPIClient(config('SG_API'))
response = sg.send(booking_message)
except Exception as e:
print(e)
else:
print('No')
Заранее спасибо за любую помощь.
Спасибо Filip и Glenn, тестирование в консоли bash и изменение каталога в задаче помогло решить проблему. Добавление 'cd /home/vicinstofsport/advancement_series && в мою задачу позволило запустить функцию.'