{"record":{"id":"1742c6d65b219875","repo":"bensheldon/good_job","slug":"concurrency-key-must-be-a-string-was-a-key-clas","errorCode":null,"errorMessage":"Concurrency key must be a String; was a #{key.class}","messagePattern":"Concurrency key must be a String; was a #(.+?)","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"lib/good_job/active_job_extensions/concurrency.rb","lineNumber":350,"sourceCode":"        end\n      end\n\n      # Existing or dynamically generated concurrency key\n      # @return [Object] concurrency key\n      def good_job_concurrency_key\n        @good_job_concurrency_key || _good_job_concurrency_key\n      end\n\n      # Generates the concurrency key from the configuration\n      # @return [Object] concurrency key\n      def _good_job_concurrency_key\n        return _good_job_default_concurrency_key unless self.class.good_job_concurrency_config.key?(:key)\n\n        key = self.class.good_job_concurrency_config[:key]\n        return if key.blank?\n\n        key = instance_exec(&key) if key.respond_to?(:call)\n        raise TypeError, \"Concurrency key must be a String; was a #{key.class}\" unless VALID_TYPES.any? { |type| key.is_a?(type) }\n\n        key\n      end\n\n      # Generates the default concurrency key when the configuration doesn't provide one\n      # @return [String] concurrency key\n      def _good_job_default_concurrency_key\n        self.class.name.to_s\n      end\n    end\n  end\nend\n","sourceCodeStart":332,"sourceCodeEnd":363,"githubUrl":"https://github.com/bensheldon/good_job/blob/5fcde48f8765e69901ffa9c5a06122b19c73875f/lib/good_job/active_job_extensions/concurrency.rb#L332-L363","documentation":"Error \"Concurrency key must be a String; was a #{key.class}\" thrown in bensheldon/good_job.","triggerScenarios":"Thrown at lib/good_job/active_job_extensions/concurrency.rb:350 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure the concurrency key is a String when the job is performed.","Convert the key to a String before enqueueing or in the key block."],"exampleFix":"key = key.to_s","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5fcde48f8765e69901ffa9c5a06122b19c73875f","analyzedAt":"2026-08-23T14:55:11.399Z","schemaVersion":2},"datasetVersion":"2026-08-23T16:17:53.355Z"}