Если вы перехватите сигнал TERM, я полагаю, вы избежите исключения. Вы можете сделать это в начале вашего сценария (или, по сути, где угодно, но вам нужно сделать это только один раз).
Signal.trap("TERM") do
Kernel.exit!
end
Причиной возникновения ошибки StatementInvalid является то, что Ruby обрабатывает сигнал, вызывая исключение SIGTERM в месте текущего выполнения. ActiveRecord перехватывает исключение и перебрасывает его как StatementInvalid. Установив обработчик сигнала, Ruby выполнит ваш обработчик вместо того, чтобы вызывать исключение.
Подробнее см. В документации Ruby Signal .