【问题标题】:Run a Rails rake task from view and generate rake task results in the view?从视图中运行 Rails rake 任务并在视图中生成 rake 任务结果?
【发布时间】:2012-09-26 23:27:53
【问题描述】:

我正在尝试帮助非技术用户运行特定的 rails rake 任务并能够在他们的浏览器中查看 rake 任务的结果。

下面是我的 rake 任务代码:

namespace :partner do

  task :report => :environment do
    csv_output = Partner.generate_report
    csv_output.split("\n").each {|row| puts row}
  end

  task :sample_report => :environment do
    csv_output = Partner.generate_report(30)
    csv_output.split("\n").each {|row| puts row}
  end
end

目前我只运行 rake partner:report 并在终端中显示了一堆数据,但我希望他们能够在查看页面上按下按钮,运行 rake 任务,然后直接在视图。

非常感谢任何想法或建议。

【问题讨论】:

  • 任务运行需要多长时间?
  • 大约需要 20 分钟,它会在终端中输出一个 CSV。

标签: ruby-on-rails ruby ruby-on-rails-3 rake rake-task


【解决方案1】:

您可能希望为此目的寻找后台任务宝石。

看看这些:

https://github.com/defunkt/resque

http://mperham.github.com/sidekiq/

https://github.com/collectiveidea/delayed_job

【讨论】:

  • 感谢您的回复。我认为 resque 和延迟的工作非常适合在后台运行任务,但我要完成的是运行上述任务 rake partner:report in a View。然后在另一个 View 页面中吐出结果。目前我可以仅在终端内运行该任务,它会在终端内输出所有 CSV 报告。有什么想法吗?
  • 我的想法是将 rake 任务转换为后台作业,而不是打印到终端,您只需使用 faye 之类的东西将其推送到客户端。好吧,您不需要使用任何这些,但我认为您必须更改任务,以便它返回某些内容而不是打印。
  • 好的,所以我实际上能够直接在我的控制器索引操作中运行 rake 任务:我想知道如何在我的 View index.html.erb 页面中打印结果而不是显示报告作为终端 def index 中的 CSV t = system('rake partner:report') puts Rake::Task.task_defined?("rake partner:report") puts t.inspect()
猜你喜欢
  • 2011-04-14
  • 2010-10-09
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多