如何 运行 控制器在 config/schedule 时的动作
How to run a controller's action in whenever's config/schedule
我以前从未使用过 whenever
应用程序。试图了解如何使用它来 运行 来自控制器的动作。这可能吗?
控制器
class EntriesController < ApplicationController
def index
@entries = Entry.all
end
def scrape
require 'open-uri'
doc = Nokogiri::HTML(open("https://www.reddit.com/"))
entries = doc.css('.entry')
entriesArray = []
entries.each do |entry|
title = entry.css('p.title > a').text
link = entry.css('p.title > a')[0]['href']
entriesArray << Entry.new({ title: title, link: link })
end
if entriesArray.map(&:valid?)
entriesArray.map(&:save!)
end
respond_to do |format|
format.html { redirect_to entries_url, notice: 'Entries were successfully scraped.' }
format.json { entriesArray.to_json }
end
end
end
Config/schedule.rb
every 1.day, :at => "12:00pm" do
runner "Task.scrape"
end
它看起来不像是接受任何参数。不要忘记控制器只是 Ruby 个对象:
EntriesController.new.scrape
将您的代码移动到单独的文件并在 schedule.rb 和控制器中重新使用它:
# lib/reddit_scrapper.rb
require 'open-uri'
module RedditScrapper
def self.scrape
doc = Nokogiri::HTML(open("https://www.reddit.com/"))
entries = doc.css('.entry')
entriesArray = []
entries.each do |entry|
title = entry.css('p.title > a').text
link = entry.css('p.title > a')[0]['href']
entriesArray << Entry.new({ title: title, link: link })
end
if entriesArray.map(&:valid?)
entriesArray.map(&:save!)
end
end
end
控制器代码:
class EntriesController < ApplicationController
def index
@entries = Entry.all
end
def scrape
RedditScrapper.scrape
respond_to do |format|
format.html { redirect_to entries_url, notice: 'Entries were successfully scraped.' }
format.json { entriesArray.to_json }
end
end
end
每当任务:
every 1.day, :at => "12:00pm" do
runner "RedditScrapper.scrape"
end
我以前从未使用过 whenever
应用程序。试图了解如何使用它来 运行 来自控制器的动作。这可能吗?
控制器
class EntriesController < ApplicationController
def index
@entries = Entry.all
end
def scrape
require 'open-uri'
doc = Nokogiri::HTML(open("https://www.reddit.com/"))
entries = doc.css('.entry')
entriesArray = []
entries.each do |entry|
title = entry.css('p.title > a').text
link = entry.css('p.title > a')[0]['href']
entriesArray << Entry.new({ title: title, link: link })
end
if entriesArray.map(&:valid?)
entriesArray.map(&:save!)
end
respond_to do |format|
format.html { redirect_to entries_url, notice: 'Entries were successfully scraped.' }
format.json { entriesArray.to_json }
end
end
end
Config/schedule.rb
every 1.day, :at => "12:00pm" do
runner "Task.scrape"
end
它看起来不像是接受任何参数。不要忘记控制器只是 Ruby 个对象:
EntriesController.new.scrape
将您的代码移动到单独的文件并在 schedule.rb 和控制器中重新使用它:
# lib/reddit_scrapper.rb
require 'open-uri'
module RedditScrapper
def self.scrape
doc = Nokogiri::HTML(open("https://www.reddit.com/"))
entries = doc.css('.entry')
entriesArray = []
entries.each do |entry|
title = entry.css('p.title > a').text
link = entry.css('p.title > a')[0]['href']
entriesArray << Entry.new({ title: title, link: link })
end
if entriesArray.map(&:valid?)
entriesArray.map(&:save!)
end
end
end
控制器代码:
class EntriesController < ApplicationController
def index
@entries = Entry.all
end
def scrape
RedditScrapper.scrape
respond_to do |format|
format.html { redirect_to entries_url, notice: 'Entries were successfully scraped.' }
format.json { entriesArray.to_json }
end
end
end
每当任务:
every 1.day, :at => "12:00pm" do
runner "RedditScrapper.scrape"
end