2012-03-11 2 views
2

Я пытаюсь сделать работу resque с герокой. Он работает с моим другим приложением, но я не понимаю эту ошибки в журналах рабочих:Resque/Rails/Heroku: PG :: Ошибка: результат был очищен

PG::Error: result has been cleared: SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 

Поэтому, когда я добавить задание в очередь, работник берет на себя работу и бросает ошибку выше.

Вот класс рабочий:

class Companies 
    @queue = :companies 

    def self.perform(current_user_id, model) 
    @current_user = User.find(current_user_id) 

    ... do things with @current_user and model... 
    end 
end 

И я называю выполнение действий с использованием: Resque.enqueue(Companies, current_user.id, 'quotes')

ответ

4

Это сообщение об ошибке указывает на внутреннюю ошибку в жемчужину PG, который используется для взаимодействия с Postgres база данных. Он указывает на ошибку размещения коллекции/памяти, в которой результат выполненного запроса postgres был удален из памяти при доступе.

Кому-то, как герою, придется отлаживать это, похоже, проблема на уровне платформы.

+1

Хотя я согласен с вашим диагнозом, ваш вывод, что это Heroku проблема уровня платформы кажется прочь. Heroku не контролирует версию pg, которую вы используете, ни веб-сервер, который вы выберете (Puma, Unicorn, Thin, et al.), И все это имеет последствия. Как отметил @wuputah, это обычно можно решить в приложении, улучшив взаимодействие соединений в forked/threaded. – catsby

4

Это чаще всего связано с несколькими процессами/потоками, использующими одно и то же соединение. Используете ли вы что-то обратное (либо after_fork, либо before_hook), чтобы повторно подключиться к базе данных для каждой работы?

Более подробно об этом см: https://stackoverflow.com/a/5519372/66752

Смежные вопросы