GithubHelp home page GithubHelp logo

schmittjoh / jmsjobqueuebundle Goto Github PK

View Code? Open in Web Editor NEW
335.0 26.0 255.0 775 KB

Run and Schedule Symfony Console Commands as Background Jobs

Home Page: http://jmsyst.com/bundles/JMSJobQueueBundle

PHP 92.38% HTML 7.62%

jmsjobqueuebundle's Introduction

jmsjobqueuebundle's People

Contributors

anorgan avatar bassrock avatar cklm avatar dlondero avatar ecentinela avatar ftassi avatar hslatman avatar jspizziri avatar karlzakhary avatar khasinski avatar kimlai avatar kingcrunch avatar kryniol avatar linglongscru avatar maeyan-zero avatar maxwellmc avatar nclavaud avatar nicolas-brousse avatar nicolasbadey avatar pborreli avatar pierredup avatar rcousens avatar rvanlaarhoven avatar samjarrett avatar samuel4x4 avatar schmittjoh avatar stephanvierkant avatar temp avatar tobiassjosten avatar tunght13488 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jmsjobqueuebundle's Issues

How to gracefully terminate job runner?

When deploying application in AWS ElasticBeanstalk new app is extracted in /var/app/current/ directory and running jobs change state to Incomplete.

That's because AWS quickly switches directories causing script execution fails. Apache receives a graceful restart signal after application is extracted in /var/app/current (after all running jobs failed).

What would be a good way to terminate runner? Stopping Supervisord? Should a new job be added in database "terminate runner" and when runner finishes all running jobs, then terminates? I guess that wouldn't work since supervisord will restart it again.

Any suggestions on this?

Add option to jms-job-queue:run command to run jobs from specific queue

A new option should be added to jms-job-queue:run command to allow different workers handle different tasks (queues). For example you could have a worker only for downloading images, another one for handling other tasks etc.

Option should accept many queue names such as queue1,queue2 in case we need to consume more than one queues in that worker.

Issue #76 could benefit from this as well.

Graceful restart on code deployment?

We have been using this bundle in production for a few days. However, last time we have deployed new code (containing a new job and console command) the job runner failed processing new jobs:

You have requested a non-existent service ...

Stopping and restarting the job runner solved the problem, so I guess this issue is related to our deployment process. We are using capistrano/capifony.

What is the proper way to achieve a graceful restart and make sure that the jobs published after deployment are processed by a fresh job runner? Are we supposed to let the runner stop on its own after maximum runtime has been reached, and let the auto-start mechanism (supervisord) handle the restart?

I am thinking of adding a special shutdown job in the queue (just before the new code is deployed) that will force the job runner to stop (and let it restart automatically), but maybe I have missed something.

Documentation is incomplete

Webinterface requires some other bundles to be registered

new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new JMS\DiExtraBundle\JMSDiExtraBundle($this),
new JMS\AopBundle\JMSAopBundle(),

Error on schema update

Every time I try to execute "doctrine:schema:update" I get this error:

[Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE jms_jobs CHANGE id id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, CHANGE exitCode exitCode SMALLINT UNSIGNED DEFAULT NULL, CHANGE maxRuntime maxRuntime SMALLINT UNSIGNED NOT NULL, CHANGE maxRetries maxRetries SMALLINT UNSIGNED NOT NULL, CHANGE runtime runtime SMALLINT UNSIGNED DEFAULT NULL, CHANGE memoryUsage memoryUsage INT UNSIGNED DEFAULT NULL, CHANGE memoryUsageReal memoryUsageReal INT UNSIGNED DEFAULT NULL':

SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql-20d_1e3' to './my_database/jms_jobs' (errno: 150)

The database is MySQL 5.5.25 (comes with MAMP).

Replace pagerfanta with pagerfanta-bundle

Right now it is impossible to replace the TwitterBootstrapView-instance with another view-type. This is important for when you want to integrate the pages into own layouts, which beside the pagination works quite flawless.

There are no further indirect dependencies.

Set up a release version!

Hi,

Thanks for the improvements, but please release versions more often. I don't want surprises each time we deploy :). This time there is a new field on the database. It should have been a new version.

thanks!

Load Balancing? Thoughts?

Hi,

I am curious if anyone has any thoughts on how we could make this bundle work on multiple servers. Here are a few of my thoughts (not neatly organized):

  • Have the server when starting the runner command connect to the database and save information about itself. (capabilities, server information, allowed queues?, maybe allow this configurable on the web ui?)
  • Add a server id/unique name to the job

Any thoughts for this?

[WebInterface] View jobs by state, date range, and show pending jobs first

After having processed more than 100k jobs with this bundle I'd like to suggest the following improvements that will ease the task of checking job.

A dropdown labeled Status should be added allowing user to query only for jobs in state of:

  • failed
  • incomplete
  • completed
  • pending

A date range field(s) (or a calendar picker) could greatly help when need to see what happened during night time. Some common values could also be used in a dropdown:

  • Last night
  • Last 24 hours
  • Last 3 days
  • Last week

Also, columns could be sortable. For example you could show most recent failed jobs or oldest pending jobs.

In case of recurring jobs & many jobs are being added all the time, some pending jobs might not appear due to pagination. It is my belief that pending tasks should appear first because most of the times user needs to know what's in the queue.

I could submit PR if community agrees these are handy additions.

Ability to add environment variables

I need set environment variables to command, but now if can't do this.

So, I did what.
Create related entity with env var.
Extend RunCommand (see below) and there set env var for process.

class RunCommand extends \JMS\JobQueueBundle\Command\RunCommand
{
    const COMMAND = 'jms-job-queue:run';

    /**
     * @var Job
     */
    protected $job;

    /**
     * @param Job $job
     * @throws \LogicException
     */
    protected function startJob(Job $job)
    {
        $this->job = $job;
        parent::startJob($job);
    }

    /**
     * @return ProcessBuilder
     */
    protected function getCommandProcessBuilder()
    {
        $pb = parent::getCommandProcessBuilder();
        /** @var Environment $Env */
        $Env = $this->job->getRelatedEntities()->first();
        if(!$Env) {
            $Env = new Environment('common', 'common');
        }

        $pb->setEnv('SYMFONY__APP', $Env->getApp());
        $pb->setEnv('SYMFONY__HOST', $Env->getHost());

        return $pb;
    }
}

but even in this case there are several problems.
In the original RunCommand many variables and methods has private access. And i can't extend this command without edit real class code.

Can you add env variables?
And create bundle more extensible (private => protected)?

Progress

We plan to use Job Queue for slow background operations (like .xls report generation). It would be nice to have ability to view progress of the job (in %).

So, basically job will have (int)progress and console command will set progress while executing job.

Its pretty easy to add, will you accept PR with such a change?

Command throws exception but job still marked as finished

I'm really not sure if this is the intended functionality, but when the job's command throws an exception the job's state is still set to 'finished' instead of 'failed'.

If it is intended to work this way, what can I do to force a job's state to be 'failed', from the command?

Job ID

Feature suggestion: Job IDs/Keys

Arbitrary strings, that may be reused later, but must be unique in the queue.

$job = new Job('a');
$job->setId('Update user 123');
$em->persist($job);
$em->flush();
$job = new Job('a');
$job->setId('Update user 123');
$em->persist($job);
$em->flush();
// Should fail, or silently dropped, because job with that ID is already enqueued
$job = new Job('a');
$job->setId('Update user 123');
$em->persist($job);
$em->flush();

// Wait a looong time

$job = new Job('a');
$job->setId('Update user 123');
$em->persist($job);
$em->flush();
// May succeed, when the previous job was processed

null means "current behaviour".

To be honest: Handling this on the entity manager directly makes me feel a little bit uncomfortable. Is theres a reason, why there is no layer in between (like Queue with $queue->enqueue($job);)?

Database creation fail

Is this my env or bundle? Just tried to install and run db tables creation... Tried both 1.0.0 and latest dev.

Failing on do:sch:up --force:

  An exception occurred while executing 'ALTER TABLE jms_jobs CHANGE id id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, CHANGE exitCode exitCode SMALLINT UNSIGNED DEFAULT NULL, CHA
  NGE maxRuntime maxRuntime SMALLINT UNSIGNED NOT NULL, CHANGE maxRetries maxRetries SMALLINT UNSIGNED NOT NULL, CHANGE runtime runtime SMALLINT UNSIGNED DEFAULT NULL, CHANGE m
  emoryUsage memoryUsage INT UNSIGNED DEFAULT NULL, CHANGE memoryUsageReal memoryUsageReal INT UNSIGNED DEFAULT NULL':
  SQLSTATE[HY000]: General error: 1025 Error on rename of './amazing_survival/#sql-236_4a' to './amazing_survival/jms_jobs' (errno: 150)```

Periodic jobs by cron

What about periodic jobs? It would be nice supports something like this

<service id="vendorname.newsfeed.send_greetings" synthetic="true">
    <tag name="task" command="vendorname:newsfeed:send-greetings -e prod" cron-expr="10 3 * * *" />
</service>

Locking with timeout

If the runner command would create a lock on the filesystem (probably with a periodic touch() to mark it's still alive, and a user configured timeout so you can say if the lock hasn't been touched in an hour just override it) then we could simply run it in a cron job every minute, and it would silently exit if another job is still in progress. It would be a bit easier to setup and maintain than having to run supervisord.

JobQueue aware commands

It seems the command you want to queue needs to be JobsQueue aware?

Would you recommend setting up "wrapper commands" to run the ones I actually want executed? Or is there a way to have JobQueueBundle run my commands without adding the --jms-job-id option to them all?

Issues with "json_array" type

The json_array type does not seem to be available in the version of my Doctrine DBAL.

Is there any particular reason why the standard array type is not sufficient?

I'd actually prefer if this was used because of the speed advantage of serialized arrays versus JSON - and since I don't see any reason to store the values as JSON.

IMPORTANT: stackTrave is not saving correctly and breaks the queue

Hi,

We are having a strange error. One of our tasks randomly gives an error (it's not this library fault) and throws an Exception. The problem comes when the Job is saved with an incorrect stackTrace, as it's incomplete

O:55:"Symfony\Component\HttpKernel\Exception\FlattenException":9:{s:64:"Symfony\Component\HttpKernel\Exception\FlattenExceptionmessage";s:216:"cURL resource: Resource id #902; cURL error: SSL read: error:00000000:lib(0):func(0):reason(0), errno 104 (cURL error code 56). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.";s:61:"Symfony\Component\HttpKernel\Exception\FlattenExceptioncode";i:0;s:65:"Symfony\Component\HttpKernel\Exception\FlattenExceptionprevious";N;s:62:"Symfony\Component\HttpKernel\Exception\FlattenExceptiontrace";a:21:{i:0;a:8:{s:9:"namespace";s:0:"";s:11:"short_class";s:0:"";s:5:"class";s:0:"";s:4:"type";s:0:"";s:8:"function";s:0:"";s:4:"file";s:109:"/var/www/domain.com/shared/vendor/amazonwebservices/aws-sdk-for-php/lib/requestcore/requestcore.class.php";s:4:"line";i:848;s:4:"args";a:0:{}}i:1;a:8:{s:9:"namespace";s:0:"";s:11:"short_class";s:11:"RequestCore";s:5:"class";s:11:"RequestCore";s:4:"type";s:2:"->";s:8:"function";s:12:"send_request";s:4:"file";s:93:"/var/www/domain.com/shared/vendor/amazonwebservices/aws-sdk-for-php/services/s3.class.php";s:4:"line";i:954;s:4:"args";a:0:{}}i:2;a:8:{s:9:"namespace";s:0:"";s:11:"short_class";s:8:"AmazonS3";s:5:"class";s:8:"AmazonS3";s:4:"type";s:2:"->";s:8:"function";s:12:"authenticate";s:4:"file";s:93:"/var/www/domain.com/shared/vendor/amazonwebservices/aws-sdk-for-php/services/s3.class.php";s:4:"line";i:1465;s:4:"args";a:2:{i:0;a:2:{i:0;s:6:"string";i:1;s:8:"bucketname";}i:1;a:2:{i:0;s:5:"array";i:1;a:5:{s:3:"acl";a:2:{i:0;s:6:"string";i:1;s:11:"public-read";}s:4:"body";a:2:{i:0;s:6:"string";i:1;s:192372:"

The string that should follow s:192372:" is an image. The task with the problem uploads images to Amazon S3, and because of a library/Amazon sometimes it's giving an error. As this field is incorrect, we have the following error on the Job running task:

[ErrorException]                                                                                                                                         
Notice: unserialize(): Error at offset 1640 of 1648 bytes in /Users/fesja/Sites/te3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php line 48 

How can we proceed to not save incorrect stack traces?

Update

I'm already encapsulating the code in a try-catch, but it seems the JobQueueLibrary is capturing the exception first.

try {
    // code that uploads the photo to Amazon
    ...

} catch(\Exception $e) {
    throw new \Exception("Error saving the photo on Amazon");
}

Sleep padding command

I'm queuing up a lot of jobs to read data from an external API and I would like to give them some rest between each batch. I could of course add a sleep(5) to my command but that'll be annoying when I run the same command manually.

Instead I would like to add a command which just sleeps for X seconds and then I could make my actual command dependent on the sleep command. Do you think this would be a good addition to JMSJobQueueBundle? Then I'll wrap up a PR.

Enhancement: Group jobs so the list is all green ;)

Thanks a lot for the bundle. It's great. One improvement that I'd love to have is to group the jobs when you retry failed jobs. Right now I can see the failed jobs and the finished jobs, but I have to read the command-args to check that everything is right.

The list should be all green. So if something fails, I see a red. I fix it and I retry the job. And if it succeeds then the list is all green again. I would be able to see the previous failed jobs in another tab or inside the retried job that has finished.

If nobody takes the effort, I can do it in some weeks. But I really think, from a user experience perspective, that it will help a lot.

Different object manager to use

Allow to specify an service-id of a different object manager than the default entity manager. The downgrade to ObjectManager instead of EntityManager would cover #25 too.

Work with Mongo

Hello! We use mongo and don't want to use MySQL. Please Could you specify the right way to do it.
Thanks!

getManagerForClass() Issue

Hi,

I juste upgrade one application with Symfony 2.3 and i get this error :

Fatal error:  Call to a member function getManagerForClass() on a non-object in ... vendor/jms/job-queue-bundle/JMS/JobQueueBundle/Controller/JobController.php on line 155

I tried to find the issue and i found $this->registry is null.

If you can explain me this bug it,
Thx

Symfony parameters in Supervisor config file ?

How did you manage to send %kernel.root_dir% to your /etc/supervisord.config file ?

Is it possible to make some parameters dynamic regarding a Symfony project path in the Supervisor config file ?

Override/extends the bundle not possible

It's not possible to override JobController actions. It will always load the Parent bundle controller and not the child.

The problem seems to be this bundle:
JMS\DiExtraBundle\JMSDiExtraBundle

Just removing that bundle makes the overriding process work by the book. Ofcourse JobQueueBundle doesn't work anymore.

So right now I'm not able to use this bundle at all because i can't extend the functionality and integrate it into my app.

Clean up jobs with incoming dependencies

The clean up command is not cleaning up jobs with dependencies. It is just doing a count to see if there are dependencies instead of a check to make sure the dependencies are closed matching the main job.

Can't use the console when no database available

I would like to validate my project through SensioLabsInsight but I get issues with this bundle because of the missing of databases on SensioLabsInsight VMs.

The main issue is due to composer scripts (clearCache,...) which call app/console, which load JMSJobQueueBundle, which get doctrine connections on boot, and then try to launch mysql connections.

I already fixed some issues on app/console calls by disabling statistics, but the part on the bundle file is not configurable...

I don't know if I can solve this with some workaround or if the bundle must be updated?

Enhacement: Requeue

After a job fails (even retries), it will be useful to requeue the job from the control panel.
For example, the admin can see the application error, fix it, and requeue the job.
Maybe is as easy as updating some fields on jms_jobs when clicking on some button on the UI.
What do you think=

Container not availabe in command constructer

When updating the app/console file to use JMS\JobQueueBundle\Console\Application, I get the following error whenever I try to run any console command:

Fatal error: Call to a member function getParameter() on a non-object in vendor/jms/job-queue-bundle/JMS/JobQueueBundle/Console/Application.php on line 32

In the constructer of Console/Application.php, there is a call to $kernel->getContainer(), but the container is only initiated when the doRun method is called

Using Symfony 2.1 on PHP 5.4.6

Replacement of standard console application

Why is the replacement of the standard console application needed?
This leads to several disadvantages, for example that a database connection is always created on execution of app/console.
Wouldn't it be better to just implement a command that runs a job by ID?
In our project the tests now fail, because we have no database configured for the tests.

saveDebugInformation fails when doctrine is configured with underscore namin strategy

The update SQL in Application::saveDebugInformation is using hardcored camelCase field names (like stackTrace, memoryUsage). My project is configured to use underscore naming strategy for doctrine fields so in my database these fields look like this: stack_trace, memory_usage so of course this SQL fails and results in exception.
Same for stats table.

Table 'jms_jobs_statistics' was not locked with LOCK TABLES

Hello, these errors appear when statistics are updated.

[Doctrine\DBAL DBALException]
An exception occurred while executing 'UPDATE jms_jobs SET stackTrace = ?, memoryUsage = ?, memoryUsageReal = ? WHERE id = ?' with params
...
SQLSTATE[HY000]: General error: 1100 Table 'jms_job_statistics' was not locked with LOCK TABLES
...
SQLSTATE[HY000]: General error: 1100 Table 'jms_jobs' was not locked with LOCK TABLES
...

WebInterface rendering as xml

The web interface page seems to be rendering as xml. I am using FOSRestBundle if that has anything to do with it. Is there a configuration somewhere I could be missing that would cause this?

Horizontal scaling job concurrency issue

We wanted to test for the possibility that there's too many jobs for a single instance to handle, and add more instances to tackle more jobs. From initial tests, this is what looks like is happening:

  • Both instance's job runners start and grab the same "pending" job row.
  • Both set the state to "running", and continue to both run the job.

This is bad for obvious reasons but we also have our jobs create new jobs as needed after they complete. So this compounds the issue by adding new duplicate jobs at the end.

Can Innodb row-locking solve this issue? Has anyone else solved it? Scaling vertically is an option but only for so long. I foresee too many jobs for a single instance.

Issue Purging DB W/Doctrine Fixtures

So I am using doctrine fixtures to pre-load my database with data and it seems that doctrine fixtures has trouble clearing the jms_jobs tables when there are relations.

Is it possible that it is the way the relations are setup in the JMS Bundle?

purging database



  [Doctrine\DBAL\DBALException]                                                                                                                                                             
  An exception occurred while executing 'DELETE FROM jms_jobs':                                                                                                                             

  SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (``.`jms_job_related_entities`, CONSTRAINT `FK_E956F4E  
  2BE04EA9` FOREIGN KEY (`job_id`) REFERENCES `jms_jobs` (`id`))     

Enhancement: ODM MongoDB support

I came across to your bundle while searching a job queue solution for my companies framework. It was perfect if it wasn't for the lack of mongodb support so I went ahead and forked the project to add it myself.

Even though there were too many hard coded references to doctrine orm I managed to add some of the base functionality. (you can see it here: https://github.com/eymengunay/JMSJobQueueBundle) I don't prefer to reinvent the wheel but I have seen that mongodb support requires a lot of changes to the current code so before going any further I wanted to ask you if you prefer me to make a pr to your repository or go on as an independent fork.

Container doesn't get registered in the prod environment

jms-job-queue:run --verbose --env=prod

The run command always throws this error in the prod env, while it works fine in dev.

PHP Fatal error: Uncaught exception
'Symfony\Component\DependencyInjection\Exception\InvalidArgumentException' with message 'The parameter "jms_job_queue.statistics" must be defined.' in
/home/florin/PhpstormProjects/dubios/app/cache/prod/appProdProjectContainer.php:1149

        $kernel->boot();
        if ($kernel->getContainer()->getParameter('jms_job_queue.statistics')) {
            $this->insertStatStmt = "INSERT INTO jms_job_statistics (job_id, characteristic, createdAt, charValue) VALUES (:jobId, :name, :createdAt, :value)";
            register_tick_function(array($this, 'onTick'));
        }

the bundle parameters are never registered in the prod container, any idea why?

Uncaught exception 'Doctrine\ORM\ORMException'

I get a:
Fatal error: Uncaught exception 'Doctrine\ORM\ORMException' with message 'Unknown Entity namespace alias 'JMSJobQueueBundle'.'

On every console command I do.

Edit:
Only getting this when using the console Application of the JMSJobQueueBundle.

bug on job creation while using sqlsrv

I am using Symfony 2.6 with SQLSRV and below is simple job creation code:

$job = new Job('myapp:test', array('test-arg'));
$em->persist($job);
$em->flush($job);

and this is throwing following error:

[2015-01-04 16:13:42] request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\DBALException: "An exception occurred while executing 'INSERT INTO jms_jobs (state, queue, priority, createdAt, startedAt, checkedAt, executeAfter, closedAt, command, args, output, errorOutput, exitCode, maxRuntime, maxRetries, stackTrace, runtime, memoryUsage, memoryUsageReal, originalJob_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["pending", "default", 0, "2015-01-04 16:13:42.000000", null, null, "2015-01-04 16:13:41.000000", null, "myapp:test", "["test-arg"]", null, null, null, 0, 0, "N;", null, null, null, null]: SQLSTATE [42000, 257]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query." at XXXX\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php line 119 {"exception":"[object](Doctrine\DBAL\DBALException%28code: 0%29: An exception occurred while executing 'INSERT INTO jms_jobs %28state, queue, priority, createdAt, startedAt, checkedAt, executeAfter, closedAt, command, args, output, errorOutput, exitCode, maxRuntime, maxRetries, stackTrace, runtime, memoryUsage, memoryUsageReal, originalJob_id%29 VALUES %28?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?%29' with params ["pending", "default", 0, "2015-01-04 16:13:42.000000", null, null, "2015-01-04 16:13:41.000000", null, "myapp:test", "["test-arg"]", null, null, null, 0, 0, "N;", null, null, null, null]:nnSQLSTATE [42000, 257]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Implicit conversion from data type nvarchar to varbinary%28max) is not allowed. Use the CONVERT function to run this query. at XXXX\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php:119, Doctrine\DBAL\Driver\SQLSrv\SQLSrvException(code: 0): SQLSTATE [42000, 257]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query. at XXXX\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\SQLSrv\SQLSrvException.php:42)"} []

Exception when running as stated on the installation documentation

I've tried in two different SF2 instances and always get the same error with every branch:

FatalErrorException: Error: Call to a member function getManagerForClass() on a non-object in /var/www/sf2/vendor/jms/job-queue-bundle/JMS/JobQueueBundle/Controller/JobController.php line 155

sh: 1: exec: exec: not found

When app/console jms-job-queue:run run a Job this error is returned : sh: 1: exec: exec: not found

I found this condition that add an exec too.

if ( ! defined('PHP_WINDOWS_VERSION_MAJOR')) {
    $pb->add('exec');
}

in file Command/RunCommand.php line 266

I do not know if it is normal that the program provokes a double exec with ProcessBuilder.

FYI, I work on Mac OSX, PHP 5.3.17 and Symfony 2.1.2.

Multiple job queues

This bundle works pretty well but one case where I found it limiting is that I have say 3 types of jobs, and while the types are independent and can be run in parallel, all jobs of a given type have to be run in sequence.

Right now I limit the processes to 1, so everything runs in sequence, but it's obviously delaying things for no reason. If we could somehow define queues in the bundle config perhaps then add jobs to them, we could also configure a maximum amount of processes per queue. I understand it may not be a small task, but it would improve the flexibility a great deal.

An exception has been thrown during the rendering of a template

Hi there , thanks for this cool Bundle.

The exception is thrown when i create a job and handle to args an array then if i go to /jobs ( the view for jobs).
Example :

$job  = new Job('validate:process',
                    array(
                        $chunk,
                        true,
                        $fileID
                    ));

the job should start a Symfony command where one of the args should be an array.

stack trace :

[1] Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Warning: strlen() expects parameter 1 to be string, array given in D:\server\home\validator.dev\vendor\jms\job-queue-bundle\JMS\JobQueueBundle\Twig\JobQueueExtension.php line 41") in "JMSJobQueueBundle:Job:overview.html.twig" at line 46.
    at n/a
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4523

    at Twig_Template->displayBlock('content', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\twig\ca\da\140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a.php line 46

    at __TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a->doDisplay(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4574

    at Twig_Template->displayWithErrorHandling(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4555

    at Twig_Template->display(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content')))
        in D:\server\home\validator.dev\app\cache\dev\twig\38\e8\2f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c.php line 27

    at __TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c->doDisplay(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4574

    at Twig_Template->displayWithErrorHandling(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4555

    at Twig_Template->display(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4562

    at Twig_Template->render(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bridge\Twig\TwigEngine.php line 50

    at Symfony\Bridge\Twig\TwigEngine->render('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\TwigEngine.php line 74

    at Symfony\Bundle\TwigBundle\TwigEngine->render('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Debug\TimedTwigEngine.php line 50

    at Symfony\Bundle\TwigBundle\Debug\TimedTwigEngine->render('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\TwigEngine.php line 99

    at Symfony\Bundle\TwigBundle\TwigEngine->renderResponse('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 6477

    at Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener->onKernelView(object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in  line 

    at call_user_func(array(object(TemplateListener), 'onKernelView'), object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Component\EventDispatcher\Debug\WrappedListener.php line 59

    at Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke(object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in  line 

    at call_user_func(object(WrappedListener), object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 1741

    at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(object(WrappedListener)), 'kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 1674

    at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 1838

    at Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher.php line 112

    at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 2978

    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), '1')
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 2937

    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1', true)
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 3086

    at Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(object(Request), '1', true)
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 2336

    at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
        in D:\server\home\validator.dev\httpdocs\app_dev.php line 28

[2] Symfony\Component\Debug\Exception\ContextErrorException: Warning: strlen() expects parameter 1 to be string, array given in D:\server\home\validator.dev\vendor\jms\job-queue-bundle\JMS\JobQueueBundle\Twig\JobQueueExtension.php line 41
    at n/a
        in D:\server\home\validator.dev\vendor\jms\job-queue-bundle\JMS\JobQueueBundle\Twig\JobQueueExtension.php line 41

    at Symfony\Component\Debug\ErrorHandler->handle('2', 'strlen() expects parameter 1 to be string, array given', 'D:\server\home\validator.dev\vendor\jms\job-queue-bundle\JMS\JobQueueBundle\Twig\JobQueueExtension.php', '41', array('args' => array('emails' => array(array('email' => ' [email protected]', 'id' => '146'), array('email' => ' [email protected]', 'id' => '612'), array('email' => '[email protected]', 'id' => '138'), array('email' => '[email protected]', 'id' => '139'), array('email' => '[email protected]', 'id' => '140'), array('email' => '[email protected]', 'id' => '141'), array('email' => '[email protected]', 'id' => '142'), array('email' => '[email protected]', 'id' => '143'), array('email' => '[email protected]', 'id' => '144'), array('email' => '[email protected]', 'id' => '145'), array('email' => '[email protected]', 'id' => '147'), array('email' => '[email protected]', 'id' => '148'), array('email' => '[email protected]', 'id' => '149'), array('email' => '[email protected]', 'id' => '150'), array('email' => '[email protected]', 'id' => '486'), array('email' => '[email protected]', 'id' => '151'), array('email' => '[email protected]', 'id' => '152'), array('email' => '[email protected]', 'id' => '153'), array('email' => '[email protected]', 'id' => '154'), array('email' => '[email protected]', 'id' => '155'), array('email' => '[email protected]', 'id' => '156'), array('email' => '[email protected]', 'id' => '782'), array('email' => '[email protected]', 'id' => '350'), array('email' => '[email protected]', 'id' => '157'), array('email' => '[email protected]', 'id' => '158'), array('email' => '[email protected]', 'id' => '246'), array('email' => '[email protected]', 'id' => '159'), array('email' => '[email protected]', 'id' => '211'), array('email' => '[email protected]', 'id' => '160'), array('email' => '[email protected]', 'id' => '161'))), 'maxLength' => '60', 'str' => '', 'first' => true, 'arg' => array(array('email' => ' [email protected]', 'id' => '146'), array('email' => ' [email protected]', 'id' => '612'), array('email' => '[email protected]', 'id' => '138'), array('email' => '[email protected]', 'id' => '139'), array('email' => '[email protected]', 'id' => '140'), array('email' => '[email protected]', 'id' => '141'), array('email' => '[email protected]', 'id' => '142'), array('email' => '[email protected]', 'id' => '143'), array('email' => '[email protected]', 'id' => '144'), array('email' => '[email protected]', 'id' => '145'), array('email' => '[email protected]', 'id' => '147'), array('email' => '[email protected]', 'id' => '148'), array('email' => '[email protected]', 'id' => '149'), array('email' => '[email protected]', 'id' => '150'), array('email' => '[email protected]', 'id' => '486'), array('email' => '[email protected]', 'id' => '151'), array('email' => '[email protected]', 'id' => '152'), array('email' => '[email protected]', 'id' => '153'), array('email' => '[email protected]', 'id' => '154'), array('email' => '[email protected]', 'id' => '155'), array('email' => '[email protected]', 'id' => '156'), array('email' => '[email protected]', 'id' => '782'), array('email' => '[email protected]', 'id' => '350'), array('email' => '[email protected]', 'id' => '157'), array('email' => '[email protected]', 'id' => '158'), array('email' => '[email protected]', 'id' => '246'), array('email' => '[email protected]', 'id' => '159'), array('email' => '[email protected]', 'id' => '211'), array('email' => '[email protected]', 'id' => '160'), array('email' => '[email protected]', 'id' => '161'))))
        in  line 

    at strlen(array(array('email' => ' [email protected]', 'id' => '146'), array('email' => ' [email protected]', 'id' => '612'), array('email' => '[email protected]', 'id' => '138'), array('email' => '[email protected]', 'id' => '139'), array('email' => '[email protected]', 'id' => '140'), array('email' => '[email protected]', 'id' => '141'), array('email' => '[email protected]', 'id' => '142'), array('email' => '[email protected]', 'id' => '143'), array('email' => '[email protected]', 'id' => '144'), array('email' => '[email protected]', 'id' => '145'), array('email' => '[email protected]', 'id' => '147'), array('email' => '[email protected]', 'id' => '148'), array('email' => '[email protected]', 'id' => '149'), array('email' => '[email protected]', 'id' => '150'), array('email' => '[email protected]', 'id' => '486'), array('email' => '[email protected]', 'id' => '151'), array('email' => '[email protected]', 'id' => '152'), array('email' => '[email protected]', 'id' => '153'), array('email' => '[email protected]', 'id' => '154'), array('email' => '[email protected]', 'id' => '155'), array('email' => '[email protected]', 'id' => '156'), array('email' => '[email protected]', 'id' => '782'), array('email' => '[email protected]', 'id' => '350'), array('email' => '[email protected]', 'id' => '157'), array('email' => '[email protected]', 'id' => '158'), array('email' => '[email protected]', 'id' => '246'), array('email' => '[email protected]', 'id' => '159'), array('email' => '[email protected]', 'id' => '211'), array('email' => '[email protected]', 'id' => '160'), array('email' => '[email protected]', 'id' => '161')))
        in D:\server\home\validator.dev\vendor\jms\job-queue-bundle\JMS\JobQueueBundle\Twig\JobQueueExtension.php line 41

    at JMS\JobQueueBundle\Twig\JobQueueExtension->formatArgs(array('emails' => array(array('email' => ' [email protected]', 'id' => '146'), array('email' => ' [email protected]', 'id' => '612'), array('email' => '[email protected]', 'id' => '138'), array('email' => '[email protected]', 'id' => '139'), array('email' => '[email protected]', 'id' => '140'), array('email' => '[email protected]', 'id' => '141'), array('email' => '[email protected]', 'id' => '142'), array('email' => '[email protected]', 'id' => '143'), array('email' => '[email protected]', 'id' => '144'), array('email' => '[email protected]', 'id' => '145'), array('email' => '[email protected]', 'id' => '147'), array('email' => '[email protected]', 'id' => '148'), array('email' => '[email protected]', 'id' => '149'), array('email' => '[email protected]', 'id' => '150'), array('email' => '[email protected]', 'id' => '486'), array('email' => '[email protected]', 'id' => '151'), array('email' => '[email protected]', 'id' => '152'), array('email' => '[email protected]', 'id' => '153'), array('email' => '[email protected]', 'id' => '154'), array('email' => '[email protected]', 'id' => '155'), array('email' => '[email protected]', 'id' => '156'), array('email' => '[email protected]', 'id' => '782'), array('email' => '[email protected]', 'id' => '350'), array('email' => '[email protected]', 'id' => '157'), array('email' => '[email protected]', 'id' => '158'), array('email' => '[email protected]', 'id' => '246'), array('email' => '[email protected]', 'id' => '159'), array('email' => '[email protected]', 'id' => '211'), array('email' => '[email protected]', 'id' => '160'), array('email' => '[email protected]', 'id' => '161'))))
        in D:\server\home\validator.dev\app\cache\dev\twig\b4\94\c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4.php line 96

    at __TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4->getcommand(object(Job))
        in D:\server\home\validator.dev\app\cache\dev\twig\38\e8\2f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c.php line 138

    at __TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c->block_content(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4519

    at Twig_Template->displayBlock('content', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\twig\ca\da\140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a.php line 46

    at __TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a->doDisplay(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4574

    at Twig_Template->displayWithErrorHandling(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content'), 'javascripts' => array(object(__TwigTemplate_cada140b30363bab76e3adcd5387b9d34f4877bf99ba06ab632c1dce5db5b35a), 'block_javascripts')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4555

    at Twig_Template->display(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables), 'macros' => object(__TwigTemplate_b494c50fab80548105e3f4a6339a50ac7204943067fd22214350d03dd203f0f4)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content')))
        in D:\server\home\validator.dev\app\cache\dev\twig\38\e8\2f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c.php line 27

    at __TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c->doDisplay(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4574

    at Twig_Template->displayWithErrorHandling(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure), 'assetic' => array('debug' => true, 'vars' => object(ValueContainer), 'use_controller' => true), 'app' => object(GlobalVariables)), array('title' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_title'), 'content' => array(object(__TwigTemplate_38e82f1279eee81d3351d044d3fb125a162a341cd5eb2b4100f52d5ccf3ff09c), 'block_content')))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4555

    at Twig_Template->display(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 4562

    at Twig_Template->render(array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bridge\Twig\TwigEngine.php line 50

    at Symfony\Bridge\Twig\TwigEngine->render('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\TwigEngine.php line 74

    at Symfony\Bundle\TwigBundle\TwigEngine->render('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Debug\TimedTwigEngine.php line 50

    at Symfony\Bundle\TwigBundle\Debug\TimedTwigEngine->render('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\TwigEngine.php line 99

    at Symfony\Bundle\TwigBundle\TwigEngine->renderResponse('JMSJobQueueBundle:Job:overview.html.twig', array('jobsWithError' => array(), 'jobPager' => object(Pagerfanta), 'jobPagerView' => object(TwitterBootstrapView), 'jobPagerGenerator' => object(Closure)))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 6477

    at Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener->onKernelView(object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in  line 

    at call_user_func(array(object(TemplateListener), 'onKernelView'), object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Component\EventDispatcher\Debug\WrappedListener.php line 59

    at Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke(object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in  line 

    at call_user_func(object(WrappedListener), object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 1741

    at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(object(WrappedListener)), 'kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 1674

    at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\app\cache\dev\classes.php line 1838

    at Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\vendor\symfony\symfony\src\Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher.php line 112

    at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 2978

    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), '1')
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 2937

    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1', true)
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 3086

    at Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(object(Request), '1', true)
        in D:\server\home\validator.dev\app\bootstrap.php.cache line 2336

    at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
        in D:\server\home\validator.dev\httpdocs\app_dev.php line 28

I thinks its only a twig issue , as in the DB the jobs a stored fine

Enhacement: tags

Allow to tag a job with multiple tags and allow to include / exclude tags on the command.
So, for example, I can run a command with video_conversion tag (a long running task) and another command with email_sending tag (a quick and important task).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.