module Que::Scheduler::StateChecks

Public Class Methods

check() click to toggle source
# File lib/que/scheduler/state_checks.rb, line 9
def check
  assert_db_migrated
end

Private Class Methods

assert_db_migrated() click to toggle source
# File lib/que/scheduler/state_checks.rb, line 15
        def assert_db_migrated
          db_version = Que::Scheduler::Migrations.db_version
          return if db_version == Que::Scheduler::Migrations::MAX_VERSION

          sync_err =
            if Que::Scheduler::VersionSupport.running_synchronously? && db_version.zero?
              code = Que::Scheduler::VersionSupport.running_synchronously_code?
              <<~ERR_SYNC
                You currently have Que to run in synchronous mode using
                #{code}, so it is most likely this error
                has happened during an initial migration. You should disable synchronous mode and
                try again. Note, que-scheduler uses "forward time" scheduled jobs, so will not work
                in synchronous mode.

              ERR_SYNC
            end

          raise(<<-ERR)
            The que-scheduler db migration state was found to be #{db_version}. It should be #{Que::Scheduler::Migrations::MAX_VERSION}.
            #{sync_err}
            que-scheduler adds some tables to the DB to provide an audit history of what was
            enqueued when, and with what options and arguments. The structure of these tables is
            versioned, and should match that version required by the gem.

            The currently migrated version of the audit tables is held in a table COMMENT (much like
            how que keeps track of its DB versions). You can check the current DB version by
            querying the COMMENT on the #{Que::Scheduler::Audit::TABLE_NAME} table like this:

            #{Que::Scheduler::Migrations::TABLE_COMMENT}

            Or you can use ruby:

              Que::Scheduler::Migrations.db_version

            To bring the db version up to the current one required, add a migration like this. It
            is cumulative, so one line is sufficient to perform all necessary steps.

            class UpdateQueSchedulerSchema < ActiveRecord::Migration
              def change
                Que::Scheduler::Migrations.migrate!(version: #{Que::Scheduler::Migrations::MAX_VERSION})
              end
            end

            It is also possible that you are running a migration with Que set up to execute jobs
            synchronously. This will fail as que-scheduler needs the above tables to work.
          ERR
        end