2015-05-28 19 views
6

ile çıkış anket, bir kontrolörün uyumsuz arka plan görevleri başlatmak mümkündür. Şu anda yapmak istediğim şeyçalıştırın Symfony2'nin komut Arka Plan ve SF2 işlem bileşeni ile Ajax

, o periyodik bu komut için kontrol eder ve ne olup bittiğini haberdar kullanıcıyı tutmak için, bu görevin çıkışını bir getirmektedir bir javascript yazmaktır. Ben bir ajax isteği aracılığıyla bunu yoklamak böylece

depolayan, işleyen ve çeşitli istekler üzerinden bilgi almak için bir yolu var mı?

+3

i komut bir yere ilerleme güncellemelerini aktarmak ve sonra ajax aramanız olduğunu karşılaştırmak sahip daha iyi olacağını düşünüyorum. –

+0

Ben de bununla ilgileniyorum. Karşılaştığım sorunlar, ajax çağrınızı başlattığınızda, bu sürecin bir yanıt beklediğini, ancak komutunuzdan bir yanıt alamıyorsunuz, çünkü bu komut dosyanızı sonlandıracak. Ya senin emrinizin ilerlemesini bir yere itmek zorunda kalacak (nerede olduğunu bilmeden) @DerickF'in dediği gibi, ya da komutunuz hala güncellemeleri bir yere itmek zorunda olan başka bir arka plan sürecini çağırmak zorunda kalacak. Bu iki senaryoyu verince, bu güncellemeleri orijinal komutunuzda zorlamak için bir yer bulmak en kolay olurdu. Benim ilk yoruma Daha –

+0

Eğer çünkü yerine daha küçük işlemler ve artık çalışmaz Senaryonuzun ile devam eden son bu büyük işlemle herşeyi ısrarcı bir performans isabet ile sona veritabanına güncellemeler bastırıyor eğer. Bu yüzden anlamaya çalışacağınız bazı önemli noktalar, bu güncellemeleri nereye zorluyorsunuz ve onları nasıl inceliyorsunuz? –

cevap

0

Arka plan işlemleri oluşturmak ve kuyruğu (meta verilerle) bir veritabanında depolamak için JMSJobQueueBundle (Github, docs) kullanıyorum.

$job = new Job('my-symfony2:command', array('some-args', 'or', '--options="foo"')); 
$em->persist($job); 
$em->flush($job); 

paket bu komutu yürütme ilgilenir (supervisord veya kurduktan sonra:

Bu paketi yükledikten sonra, sadece komuta (ve isteğe bağlı argümanları ve seçenekleri) ile veritabanındaki bir Job inat cron job) ve komutunuzun çıktısını veritabanında saklar. İşiniz başarısız olursa, yığın izini veritabanına bile kaydeder. Artık uygulamanızdaki bir işin durumunu alabilirsiniz (bitmiş olup olmadığını görmek için $job->getState()'u kullanabilirsiniz). Varsayılan olarak veritabanına neyin kaydedildiğini görmek için İş varlığı here'u bulabilirsiniz. Birçok e-posta göndermek veya büyük csv ihracatını oluştururken

ben bu yöntemi kullanılmış ve mükemmel çalışıyor.