Рельсы всякий раз, когда драгоценный камень: каждый месяц на 20-м

Я искал по всему Интернету для этого, и в документации на самом деле не говорится о ежемесячных заданиях в конкретном. Поэтому я надеялся, что кто-то может мне сказать, как это сделать.

Я установил каждый раз, когда каждый камень, и все, что мне нужно знать, является правильным синтаксисом для этого:

every :month, :on => '20th', :at => '02:00' do
  runner "Mailer.send_friend_sheet"
end

Надеюсь, кто-то может указать мне в правильном направлении.

Спасибо!

Ответ 1

Если параметр :on не поддерживается, насколько мне известно, но вы должны иметь возможность делать

every '0 2 20 * *' do
  runner "Mailer.send_friend_sheet"
end

"0 2 20 * *" - это просто соответствующий синтаксис cron - см. http://www.manpagez.com/man/5/crontab/

Ответ 2

Вы также можете использовать необработанный синтаксис cron, если не знаете, как использовать синтаксис ruby.

То, что вы хотите, будет выглядеть так:

every '0 2 20 * *' do
  command "echo 'you can use raw cron sytax too'"
end

Вот быстрый cheatseet для использования синтаксиса cron

*     *     *   *    *        command to be executed
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Бесстыдно украден из: http://adminschoice.com/crontab-quick-reference

Ответ 3

Если вы хотите, чтобы он был более читаемым, вы также можете просто анализировать дату в тексте.

every 1.month, :at => 'January 20th 2:00am' do
  runner "Mailer.send_friend_sheet"
end

Это также сгенерирует 0 2 20 * *.

Ответ 4

Еще лучше:

every 1.month, at: 'start of the month at 2am' do
  runner "Mailer.send_friend_sheet"
end