Ceci est ma première application Catalyst et je ne sais pas comment résoudre le problème suivant.Comment gérer un processus de longue durée dans une application Catalyst?
L'utilisateur entre des données dans un formulaire et sélectionne un fichier (jusqu'à 100 Mo) à télécharger. Après la soumission du formulaire, le calcul réel prend jusqu'à 5 minutes et les résultats sont stockés dans un DB. Ce que je veux faire est d'exécuter ce processus (et peut-être aussi le téléchargement de fichier) dans le fond pour éviter un délai d'expiration du serveur. Il devrait y avoir une sorte de retour à l'utilisateur (comme un message "Le travail a été démarré" ou une barre de progression). Le formulaire doit être bloqué pendant que le travail est en cours d'exécution. Une page de résultat devrait être affichée une fois le travail terminé.
En heures de lecture, je suis tombé sur des concepts comme les demandes asynchrones, les files d'attente, les démons, Gearman, ou Catalyst::Plugin::RunAfterRequest.
Comment le feriez-vous? Merci d'aider un novice web dev! PS: Dans mon application locale actuelle, le travail est effectué en parallèle avec Parallel :: ForkManager. Pour la vraie application, serait-il conseillé d'utiliser un service de cloud computing comme Amazon EC2? Ou juste trouver un hébergeur qui offre des serveurs multi-core?
Faire le téléchargement en tant que demande asynchrone aurait du sens. Renvoie un ID de travail et demande à l'action de définir un indicateur dans un modèle lorsqu'il est terminé. Ensuite, demandez à votre page d'interroger le backend de manière asynchrone régulièrement (comme tous les 10s) et si elle obtient un _done_, actualisez la page. Je vais taper une réponse dans un peu. – simbabque
En ce qui concerne votre question Hoster, cela dépend vraiment du cas d'utilisation. Amazon ou d'autres services cloud ont l'avantage d'être facilement évolutifs si nécessaire, mais peuvent être plus coûteux que d'avoir votre propre serveur, en plus d'autres considérations. Cette question devrait probablement être affichée séparément et ailleurs. – bytepusher
@simbabque Si vous avez le temps, des astuces pour des outils/plugins utiles ou des exemples de code seraient très utiles. Merci bytepusher, je vais considérer que lorsque l'application va en production –