solid_queue
solid_queue copied to clipboard
Recurring schedule hides configuration errors
When configuring recurring jobs I've noticed that SolidQueue is hiding configuration mistakes that make it difficult to catch potential errors:
- Jobs that don't pass
SolidQueue::RecurringTask's validation are silently filtered out without any error - Setting
SOLID_QUEUE_RECURRING_SCHEDULEto a path that doesn't exist makes SolidQueue silently fall back to an empty schedule
Expected behaviour: above errors should trigger an exception.
I also noticed a very odd behaviour:
- when I pass an invalid path via
SOLID_QUEUE_RECURRING_SCHEDULEthen SolidQueue defaults to the defaultconfig/recurring.ymlconfiguration file - when I pass an invalid path via
--recurring_schedule_filethen SolidQueue is defaulting to an empty schedule (not reading the defaultconfig/recurring.yml)
when I pass an invalid path via
SOLID_QUEUE_RECURRING_SCHEDULEthen SolidQueue defaults to the defaultconfig/recurring.ymlconfiguration file
Hmm... I'm not seeing this. When I pass an invalid path via SOLID_QUEUE_RECURRING_SCHEDULE, the default path in config/recurrring.yml is not used either. The code path for both options (environment variable or CLI option) is the same, so it's strange the behaviour would be different.
I thought I'm just tired, but I can still replicate this behaviour - I'm testing it by adding a new task to config/recurrring.yml - it gets added every time when I'm adding SOLID_QUEUE_RECURRING_SCHEDULE=non_existing_path.yml, doesn't when using --recurring_schedule_file=non_existing_path.yml.
Also this will no longer be an issue when passing an invalid path in any of these methods will result in an error.
Could you copy the full command you're using to run Solid Queue in each case?
Used commands:
SOLID_QUEUE_RECURRING_SCHEDULE=non_existing_path.yml bin/jobsbin/jobs --recurring_schedule_file=non_existing_path.yml
Now I made a syntax error in the default config/recurring.yml and discovered that when using the env variable, SolidQueue is always reading that default configuration file, even when the env variable is pointing to a valid alternative configuration file. When using --recurring_schedule_file the default configuration file is not read and the syntax error there is not producing any errors.
What version are you running? What you describe sounds a lot like what was fixed in https://github.com/rails/solid_queue/pull/345 🤔 This would have been included in 1.0.0.beta.
I'm on 0.9.0 😅
Indeed the env variable seems to be simply ignored by cli, I got confused by the combination of these few issues.
Ahhhh! So sorry about that! It should be fixed now 😅
About the issue with the configuration, yes, it's on my radar; I've got it in my plans to raise or print some warnings about invalid configuration.
About the issue with the configuration, yes, it's on my radar; I've got it in my plans to raise or print some warnings about invalid configuration.
Raise please 😅
Also reading the code I could see that recurring.yml supports nesting tasks under rails-env keys (production, staging, etc.) - knowing this would save me some time. It might be quite a common thing to have recurring tasks tied to specific environments, might make sense to add this example in the docs ✌️
Also reading the code I could see that
recurring.ymlsupports nesting tasks under rails-env keys (production, staging, etc.) - knowing this would save me some time.
Hmm... I think this is standard for all Rails configurations 🤔 But yes, I'll enhance the example with this.
Oops, I forgot to close this one. Invalid configuration now raises an error thanks to https://github.com/rails/solid_queue/pull/427