【问题标题】:How to display output from rake task to the browser?如何将 rake 任务的输出显示到浏览器?
【发布时间】:2015-09-27 22:33:52
【问题描述】:

我有这个从网站上抓取数据的 rake 文件。当这个脚本抓取数据时,我正在使用 rake-progressbar gem 来跟踪它的进度。但是,现在我只能在终端中看到进度,并且只有在终端中输入“rake testing2”来运行 rake 文件。

我现在想要的是当我单击触发我的 rake 文件的链接时能够在浏览器中看到进度。

这是我的主页视图,其中包含触发 rake 文件(testing2.rake)的链接:

<div>
    <p>Find me in app/views/home/index.html.erb</p>

    <h3>Scrape data:</h3>
    <%= link_to "Scrape",:action => 'scrape' %>

</div>

这是我的家庭控制器:

class HomeController < ApplicationController
  def index
  end

  def scrape
    %x[rake testing2]
    redirect_to root_url
  end   

end

这是我的 rake 文件(testing2.rake),其中包含抓取数据的代码以及进度条的代码:

require 'mechanize'
require 'date'
require 'json'
require 'rake-progressbar'


task :testing2 => [:environment] do


    agent = Mechanize.new

    last_page_number = 1

    for pg_number in 1..last_page_number do

        puts "Scrapping..."

        page = agent.get("https://www.congress.gov/members?page=#{pg_number}")
        page_links = page.links_with(href: %r{.*/member/\w+})

        page_links_size = page_links.size

        member_links = page_links
        bar = RakeProgressbar.new(100)

        members = member_links.map do |link|        

          member = link.click

          name = member.search('title').text.split('|')[0]
          institution = member.search('td~ td+ td').text.split(':')[0]

          stripActivities = activities.reject { |x| x.length  == 1 }


          {
            name: name.strip,
            institution: institution.strip
          }

          bar.inc

        end


        bar.finished

    end

end

下面是终端中的输出,进度条显示:

那么,我怎样才能在浏览器上显示这个进度呢?

【问题讨论】:

  • 您想从浏览器运行 rake 任务吗?从安全角度来看,这似乎是个坏主意。
  • @pguardiario 哦?我不知道,但在这个应用程序中安全并不重要。无论如何,如果不是 rake 任务,你能告诉我在哪里更适合将我的 testing2.rake 代码放在我的 rails 应用程序中吗?因为我有不同的代码来抓取不同的网站,除了这个任务文件夹之外,我现在想不出任何其他地方可以放置它们
  • 如果它用于在浏览器中显示,它通常会显示在视图中,但在您的情况下可能没有意义。

标签: ruby-on-rails ruby web-scraping progress-bar mechanize


【解决方案1】:

进度条:

您可以将进度存储在数据库中并显示在浏览器页面中。

解析:

删除 rake 任务并在用户点击链接时以ActiveJob 运行它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-04-19
    • 1970-01-01
    • 2021-10-24
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多