как включить повторяющиеся напоминания для разных пользователей в ruby?

В настоящее время пользователи моего приложения устанавливают конкретную дату и время для одного напоминания (используя драгоценный камень Chronic).

У меня есть задание cron, которое запускается каждые 10 минут и проверяет, является ли время в напоминании ‹ Time.now, и в этот момент оно отправляет напоминание и помечает это напоминание как отправленное.

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

Кажется, я могу использовать ice_cube для повторяющейся части. Затем я использую Chronic, чтобы придумать время начала, которое будет иметь день и время повторения.

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

Вот что я пробовал:

``` напоминание = response.body['results'] #массив повторяющихся напоминаний с start_epoch и 'via' d {reminder}

  reminder.count.times do |i|

    schedule = IceCube::Schedule.new(now = Time.at(reminder[i]['value']['start_epoch'])) # get the initial start day and time
    schedule.add_recurrence_rule(IceCube::Rule.daily) #makes this a daily recurring, but how can I allow this to be customizable?

    if schedule.next_occurrence(Chronic.parse('today at 12:01AM')) < Time.now # Check if today's occurence has happened yet
      bot_response = BotResponse.get_bot_response(bot_client_id, reminder[i]['value']['bot_input_keyword'])

      if reminder[i]['value']['via'] == 'slack'
        slack_response = BotMessage.send_slack(reminder[i]['value']['slack_channel'], 
                                               bot_response[:bot_response])
        d {slack_response} 

      end #if
    end #if
  end #do

```

Вопросы:

  • Есть ли способ узнать, когда напоминание было отправлено, без записи каждого конкретного ежедневного напоминания в базу данных?
  • Есть ли более элегантный способ для пользователя в текстовой строке определить повторение?

person Satchel    schedule 06.07.2015    source источник


Ответы (1)


Рассматривали ли вы возможность использовать каждый гем для реализации повторяющихся задач через задания cron? Я думаю, вы должны иметь возможность динамически устанавливать время расписания в файле always schedule.rb, см. соответствующую проблему здесь: Rails — всякий раз, когда гем — динамические значения

person beaorn    schedule 06.07.2015
comment
Будет ли это работать для нескольких пользователей. Например, у каждого из моих клиентов есть свое время для повторения, поэтому это может быть много раз, и каждое событие имеет свое действие, отправляемое в основной сервис. - person Satchel; 07.07.2015
comment
Похоже, это создаст отдельный от job. Но если у меня есть 100 клиентов в одно и то же время, я бы хотел, чтобы им отправили одного с работы. И наоборот, если бы у меня было больше 132 разных времен, я бы не хотел, чтобы они были отдельными заданиями, поскольку они все равно могли бы выполняться заданием каждые 10 минут. - person Satchel; 07.07.2015
comment
всякий раз позволит вам запланировать запуск задачи rake каждые 10 минут. Внутри задачи rake вы можете определить любую логику, необходимую для проверки всех пользователей с событиями в течение этого 10-минутного интервала времени в сочетании с ice_cube или, тем не менее, вы сохраняете информацию о повторяющихся датах и ​​выполняете определенные действия для этого пользователя. Хотя это может не сильно отличаться от того, что вы уже делаете. - person beaorn; 07.07.2015