Я быстро создал новое приложение Rails, чтобы попытаться воспроизвести вашу проблему, вы можете найти его здесь, клонировать и видеть сами.
https://github.com/mlainez/stackoverflow-28111330/blob/master/app/models/user.rb
Первое, что вы хотите сделать, это проверить, что среда бегун работает. По умолчанию, когда используется production
. Если вы находитесь на своем локальном компьютере, обязательно установите его в development
в свой расписание.rb или проверьте документацию, чтобы узнать, как обновить crontab и установить правильную среду.
https://github.com/mlainez/stackoverflow-28111330/blob/master/config/schedule.rb#L7
Это то, что вы должны увидеть в вашем кронтаб:
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /bin/bash -l -c 'cd /Users/marc/Projects/stack && bin/rails runner -e development '\''User.recalculate'\'''
Обратите внимание, что говорит rails runner -e development
и не production
.
Другое дело, что база была права.Когда я оставляю private
ключевое слово и попытаться выполнить User.recalculate
в rails c
, он терпит неудачу с:
private method `recalculate_value' called for #<User ...>
Я удивлен, что он работает с частным ключевым словом в консоли ... Вы пытаетесь получить доступ приватного метода на экземпляр. Это невозможно в Ruby. Вы можете использовать только общедоступные методы экземпляра извне (если вы не используете send(:method)
).
Удаление закрытого ключевого слова зафиксировано, и задача выполнялась как ожидалось каждые две минуты.
Я использую Rails 4.2.0 и ruby 2.1.0 в своем коде github.
EDIT
Убедитесь, что демон cron запущен с помощью:
service cron status
Я также заметил, что в вашем выводе кронтаб у вас есть:
bin/rails runner -e development '\''User:recalculate'\''
Обратите внимание на :
между User
и recalculate
. Вы, должно быть, сделали опечатку в своем расписании. Rb
Это должно быть .
, так как это вызов метода.
Кроме того, вы можете проверить, что выходные данные от whenever -l
и crontab -l
одинаковы. Если crontab -l
отличается или пуст, то вы не используете whenever --update-crontab
или whenever -w
правильно, или что-то может быть не так с той версией, которую вы используете.
Можете ли вы предоставить какие-либо журналы или выходные данные, чтобы сделать вопрос более понятным? –
@StanislavMekhonoshin Журналы или вывод откуда? –
Когда вы запускаете каждый раз через crontab, он записывает сообщения в syslog. Вы также можете попробовать запустить User.recalculate в консоли rails, чтобы проверить, что код работает хорошо, и это когда-либо проблема. –