2016-08-25 3 views
0

У меня есть методы, которые выполняют Nokogiri. т. е. загружать страницы, извлекать содержимое, копировать в другие таблицы ... и т. д.Могу ли я включать вспомогательные методы в рейк-задачи

Эти методы находятся внутри помощника, который мне нужно периодически запускать с помощью команды rake.

Каков правильный способ вызова методов в задаче DRY.

Переместить код в файлы задач Перейти к моделям, обычный рубин Некоторые другие советы ....?

Просьба представить пример передней задачи, включая помощника

BTW: Я не хотел бы представить работу, из-за добавления еще вопросы инфраструктуры. На данный момент я предпочел бы рейк-задачу. В будущем я хотел бы перейти на некоторые рамки фоновых заданий, такие как Sidekiq или аналогичные

ответ

3

Когда вы определяете задачу рейка, вы можете загрузить свою среду. От Using helpers in model: how do I include helper dependencies? Я узнал, что вы можете включить помощников в модели. Включение их в задачу также должно работать.

task :my_task => :environment do 
    include ActionView::Helpers 
    # call a helper 
end 

С сухим представлением, я полагаю, это прекрасно - вы не повторяетесь.

Но вы также можете определить код в универсальном, глобально доступном классе/модуле и не использовать здесь include.

Вы можете определить общий класс/модули в любом файле в config/initializers, и он будет доступен в любом месте.

Вы также можете использовать каталог lib если добавить эту строку в config/application.rb:

config.autoload_paths << Rails.root.join('lib') 

Если вы написали модуль, вы можете затем include его в файле Helpers.

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

+1

Хороший ответ. Пожалуйста, улучшите его, добавив специальный помощник, например, включите ActionView :: Helpers :: Myhelper. Также «вы можете включить его в свой файл« Помощники ». Вы имели в виду: «Включить другой модуль внутри вспомогательного модуля»? –

Смежные вопросы