Hi communauté stackoverflow, J'ai un problème pour programmer un travail cron qui nécessite de gratter un site web et de le stocker comme partie du modèle (MOVIE) dans la base de données. Le problème est que le modèle semble être chargé avant l'exécution de Procfile. Comment créer un travail cron qui s'exécute en interne en arrière-plan et qui stocke les informations récupérées dans la base de données? Voici mes codes:QUESTIONS Définir des tâches Cron dans Procfile (Heroku) en utilisant apscheduler pour le projet Django
Procfile:
web: python manage.py runserver 0.0.0.0:$PORT
scheduler: python cinemas/scheduler.py
scheduler.py:
# More code above
from cinemas.models import Movie
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
@sched.scheduled_job('cron', day_of_week='mon-fri', hour=0, minutes=26)
def get_movies_playing_now():
global url_movies_playing_now
Movie.objects.all().delete()
while(url_movies_playing_now):
title = []
description = []
#Create BeatifulSoup Object with url link
s = requests.get(url_movies_playing_now, headers=headers)
soup = bs4.BeautifulSoup(s.text, "html.parser")
movies = soup.find_all('ul', class_='w462')[0]
#Find Movie's title
for movie_title in movies.find_all('h3'):
title.append(movie_title.text)
#Find Movie's description
for movie_description in soup.find_all('ul',
class_='w462')[0].find_all('p'):
description.append(movie_description.text.replace(" [More]","."))
for t, d in zip(title, description):
m = Movie(movie_title=t, movie_description=d)
m.save()
#Go to the next page to find more movies
paging = soup.find(class_='pagenating').find_all('a', class_=lambda x:
x != "inactive")
href = ""
for p in paging:
if "next" in p.text.lower():
href = p['href']
url_movies_playing_now = href
sched.start()
# More code below
from django.db import models
cinémas/models.py:
#Create your models here.
class Movie(models.Model):
movie_title = models.CharField(max_length=200)
movie_description = models.CharField(max_length=20200)
Ceci est l'erreur que je reçois quand le travail est exécuté.
2016-11-17T17: 57: 06.074914 + 00: 00 app [planificateur.1]: Traceback (appel le plus récent en dernier): 2016-11-17T17: 57: 06.074931 + 00: 00 app [planificateur. 1]: Fichier "cinemas/scheduler.py", ligne 2, en 2016-11-17T17: 57: 06.075058 + 00: 00 app [planificateur.1]: import cineplex 2016-11-17T17: 57: 06.075060+ 00:00 app [scheduler.1]: Fichier "/app/cinemas/cineplex.py", ligne 1, dans 2016-11-17T17: 57: 06.075173 + 00: 00 app [scheduler.1]: dans les cinémas. modèles importer Film 2016-11-17T17: 57: 06.075196 + 00: 00 app [scheduler.1]: Fichier "/app/cinemas/models.py", ligne 5, en 2016-11-17T17: 57: 06.075295 +00: 00 application [scheduler.1]: classe Movie (models.Model): 2016-11-17T17: 57: 06.075297 + 00: 00 application [scheduler.1]: Fichier " /app/.heroku/python/lib/python3.5/site-packages/django/db/models/base.py ", ligne 105, en nouveau 2016-11-17T17: 57: 06.075414 + 00: 00 app [planificateur.1]: app_config = apps.get_containing_app_config (module) 2016-11-17T17: 57: 06.075440 + 00: 00 app [planificateur.1]: fichier "/app/.heroku/python/lib/python3. 5/packages-site/django/apps/registry.py ", ligne 237, dans get_containing_app_config 2016-11-17T17: 57: 06.075585 + 00: 00 app [planificateur.1]: self.check_apps_ready() 2016-11 -17T17: 57: 06.075586 + 00: 00 app [scheduler.1]: fichier "/app/.heroku/python/lib/python3.5/site-packages/django/apps/registry.py", ligne 124, dans check_apps_ready 2016-11-17T17: 57: 06.075703 + 00: 00 app [scheduler.1]: augmente AppRegistryNotReady ("Les applications ne sont pas encore chargées.") 2016-11-17T17: 57: 06.075726 + 00: 00 app [sch eduler.1]: django.core.exceptions.AppRegistryNotReady: Les applications ne sont pas encore chargées.
Le travail Cron fonctionne correctement si je n'inclue pas les objets Modèle. Comment dois-je exécuter ce travail tous les jours en utilisant des objets Modèle sans échec?
Merci
Merci! Cela fonctionne pour moi :) –