Cron перерывы на работу make_voteable гем? - PullRequest
1 голос
/ 25 октября 2011

Я сталкиваюсь с очень странной ошибкой с самоцветом make_voteable . На самом деле я даже не уверен, что это связано с make_voteable или с проблемой рейка.

Мое приложение имеет модель проекта. Проекты имеют атрибут статуса. Они начинаются как «Разрабатывается», и по истечении установленного срока разработки статус изменяется на «Ожидание голосования». Затем пользователи могут голосовать за проекты "за" или "против" (до истечения срока голосования), чтобы расставить приоритеты.

Таким образом, если статус проекта «Ожидание голосования», в представлении проекта отображаются ссылки на следующие действия на контроллере моих проектов:

def vote_yes
  @project = Project.find(params[:id])
  current_user.up_vote(@project)
  flash[:success] = 'Thanks for voting!'
  redirect_to @project
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'You already voted!'
  redirect_to @project
end

def vote_no
  @project = Project.find(params[:id])
  current_user.down_vote(@project)
  flash[:success] = 'Thanks for voting!'
  redirect_to @project
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'You already voted!'
  redirect_to @project
end

Все отлично работает, если я обновляю срок / статус / голосования_деклинии через терминал или вручную меняю запись в базе данных. Голосование работает должным образом, при этом up_votes и down_votes сохраняются в соответствующей записи проекта.

Однако, если я запустил задание cron, которое я настроил, чтобы позаботиться об этом, который является обычным рабочим процессом приложения, представления отображают ссылки для голосования, пользователи могут щелкать по ним как обычно, но голосование в таблице проектов не сохраняется. Однако таблица голосований заполняется нормально, и пользователь не может голосовать снова.

Единственное, что делает задание cron, это запускает этот фрагмент кода из модели Project:

def self.close_projects
  @finished_projects = Project.where('deadline < ? and status = ?', Time.now.utc, "Developing")
  @finished_projects.each do | project |
    project.update_attribute(:status, "Pending voting")
    project.update_attribute(:voting_deadline, Time.now.utc + 1.week )
  end
end

Только последнее замечание: я запустил миграцию, чтобы добавить столбец голосования в таблицу проектов после запуска миграции, которая добавила up / down_votes к той же модели. Я не думаю, что это должно быть проблемой, но, возможно, это стоит заметить.

Я действительно ценю любой вклад.

1 Ответ

2 голосов
/ 26 октября 2011

Оказывается, это была просто ошибка проверки, которая не была вызвана драгоценным камнем. Но это была моя ошибка , полностью, поскольку проверка должна происходить только при создании, и это происходило и при обновлениях.

Тем не менее, я думаю, что код для гема мог бы улучшиться, указав на подобные ошибки, поэтому я предоставлю некоторые отзывы на их странице github.

...