2016-04-18 4 views
1

Я создал очень небольшое приложение в rails, где я создал метод модуля в/lib для обработки логики.Могу ли я использовать When Gem с модульным методом в Rails

Я также настроил каждый раз, когда запускался этот метод модуля в заданное время. Я следил за обоими readme from Whenever и этими previousposts, надеюсь, что все будет правильно.

При взгляде на риом хотя примеры цитируются так:

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
end 

every 1.day, :at => '4:30 am' do 
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning" 
end 

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot 
    runner "SomeModel.ladeeda" 
end 

Мой вопросу поэтому есть ли когда придется ссылаться на методе в модели? или может ли он ссылаться на метод модуля в/lib? Looking at this post, похоже, ссылается на необходимость использования метода в модели.

Моя проблема в том, что у меня нет базы данных, и поэтому нет моделей.

Любая помощь будет оценена по достоинству.

ответ

0

Он может ссылаться на метод в любом классе или любом модуле. (Модуль - это просто класс, который не может создать экземпляр).

Если есть промежуточные данные, которые необходимо передать между методами в вашем модуле, иногда это помогает сделать модуль классом PORO (простой старый объект Ruby), который позволяет вам создавать экземпляры (т. Е. Использовать методы) и вы можете сохранить значения в атрибутах attr_accessor, доступных для всех методов экземпляра для этого объекта.

+0

hi @SteveTurczyn благодарит за ваш ответ. это немного улучшает мои вещи. Я поставил описание в ответе @Uzbekjon, о том, что я делаю неправильно, и почему я был смущен синтаксисом Readme Whenever. В принципе «MyModel» в «runner» MyModel.some_process «полностью меня бросил. – Cliff

0

Вам не нужно вызывать методы только на моделях. Поскольку класс/модуль доступен/доступен в вашей текущей области, вы можете его вызвать. Поскольку runner может получить доступ к моделям, возможно, у вас есть настройка всякий раз, когда gem загружает приложение rails. Это означает, что он также может получить доступ к любым классам/модулям в вашей папке /lib.

Таким образом, идти вперед и позвонить, то в вашем всякий раз, когда:

every 3.hours do 
    runner "YourModule.some_method" 
end 

Если вы не используете Rails специфические особенности, я хотел бы предложить, чтобы не загружать Rails окр. Вы бы сэкономили значительные ресурсы, и он будет работать быстрее.

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

every 3.hours do 
    rake "cron:my_process" 
end 
+0

Hi @Uzbekjon Спасибо за ваш ответ. Чтобы дать вам больше информации, причина, по которой я задавал этот вопрос, состоял в том, что, как вы можете себе представить, я пытался вызвать метод модуля из файла route.rb, и он не работал. В полном любительском движении я не определил правильный способ вывода ошибок из cron. Когда я это сделал, мне была допущена ошибка, которая решила мою проблему: '/ bin/bash: bundle: command not found' – Cliff