2013-07-13 3 views
0

J'ai deux pièces jointes dans mon modèle, original & modifié.Ruby on Rails: Convertir l'audio en arrière-plan et le télécharger en utilisant un trombone?

Mon application permet à un utilisateur de télécharger un fichier audio et le backend devrait le convertir en un format modifié.

Le fichier original est téléchargé sur s3 à l'aide d'un trombone. Maintenant, j'ai besoin de traiter ce fichier en arrière-plan et le télécharger sur s3 ainsi & mettre à jour la pièce jointe modifiée dans la base de données.

La conversion de l'original en pièce jointe se fait via une simple commande système, je peux donc l'appeler depuis ma méthode ruby. Ma question est quelle est la meilleure façon de planifier ces emplois? Delayed_job est une bonne option pour cela où je viens d'écrire une méthode pour traiter le fichier original & l'enregistrer et ensuite appeler cette méthode avec un retard?

Répondre

1

delayed_job est une solution largement utilisée pour les applications où vous avez besoin de quelque chose d'intensif à faire, mais pas tout de suite. Je le recommanderais à moins que votre utilisateur ait besoin du fichier modifié immédiatement.

Alternatives:

  • Resque
  • Sidekiq
  • Navvy
  • Queue classique

Pour plus d'options, voir: https://www.ruby-toolbox.com/categories/Background_Jobs

+0

L'utilisateur aurait pas besoin immédiatement. C'est en quelque sorte ce que vous feriez sur YouTube, téléchargez votre vidéo, puis attendez que YouTube pour terminer le traitement. Pas comme si votre vidéo serait disponible instantanément. Serait-il logique d'avoir un travail cron programmé toutes les 5 minutes pour appeler un script ruby ​​qui traiterait alors tous les clips non traités? – user2186138

+0

Le travail différé est meilleur dans votre cas car il détecte les temps d'arrêt et traite les clips comme il le peut. Cron est vraiment bon à faire des choses sur une base régulière. – sscirrus

+0

Merci, c'est logique. Je vais attendre un moment pour voir si quelqu'un a d'autres idées à ce sujet. À votre santé! – user2186138

0

Sidekiq est vraiment une bonne option pour le faire fond ac activités.

Comme il ne s'agira que d'une activité ponctuelle, le travail cron n'est pas idéalement requis. Une fois que vous avez terminé le téléchargement de la vidéo originale, vous pouvez ajouter des tâches dans Sidekiq avec les paramètres essentiels qui appellent la classe ouvrière et effectuent le reste du traitement.

https://github.com/mperham/sidekiq/wiki

Vous avez aussi des plugins bons de surveillance pour surveiller le traitement de vos travaux

https://github.com/socialpandas/sidekiq_monitor

+0

Merci. Si j'ai des employés sidekiq sur deux serveurs différents contre la même base de données, cela pourrait-il causer un problème? – user2186138

+0

Il ne devrait pas être un problème assurez-vous que votre code est thread safe – Icicle

+0

pratique normale est d'avoir un processus de travail fonctionnant sidekiq, et sidekiq lui-même a plusieurs threads ... c'est une meilleure pratique que d'exécuter deux processus différents .. – Icicle

Questions connexes