Ruby on rails 在RubyonRails中创建任务

Ruby on rails 在RubyonRails中创建任务,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想为每日报告创建一个CRON任务。我需要指导在我的项目中的何处创建类(在哪个文件夹中)。如何从rails控制台为同一类实例化对象。该类将继承应用程序控制器吗?我还想知道,因为我将查询我的数据库,所以我的模型在这个文件中是否可以直接访问,或者我是否必须像在django中那样包含它们 我已经创建了一个类/lib/tasks/daily_report.rb。但我无法理解如何使用该文件创建任务 module Reports class Report class <<

我想为每日报告创建一个CRON任务。我需要指导在我的项目中的何处创建类(在哪个文件夹中)。如何从rails控制台为同一类实例化对象。该类将继承应用程序控制器吗?我还想知道,因为我将查询我的数据库,所以我的模型在这个文件中是否可以直接访问,或者我是否必须像在django中那样包含它们

我已经创建了一个类/lib/tasks/daily_report.rb。但我无法理解如何使用该文件创建任务

module Reports
    class Report
        class << self
            def collect_data
                row_data = []
                headers = ["Mobile", "Buildings", "Owners", "Tenants", "Members", "Total People"]
                row_data.push(*headers)

                puts "in side collect data"
                date = Date.today.to_s

                mobile = ["mobiles"]

                for i in mobile do
                    row = []
                    row << i

                    build_count   = Buildings.where(created_at: date, added_by: i).count
                    row << build_count
                    puts "build_count"

                    owners_count  = Residents.where(created_at: date, added_by: i, role: "owner").count
                    row << owners_count
                    puts "owners_count"
                    tenants_count = Residents.where(created_at: date, added_by: i, role: "tenant").count
                    row << tenants_count

                    members_count = MemeberRelations.where(created_at: date, added_by: i).count
                    row <<  members_count

                    total_people  = owners_count + tenants_count + members_count
                    row << total_people

                    row_data << row
                end
                puts row_data
                return row_data
            end

            def generate_csv()
                puts "walk away"
                row_data = self.collect_data
                CSV.open('/home/rajdeep/police-api/daily_report.csv', 'w') do |csv|
                    row_data.each { |ar| csv << ar }
                end
            end
        end
    end
end
模块报告
课堂报告

类如果希望从Rails管理cron任务,请尝试

将其添加到您的文件中

Gemfile

gem 'whenever', require: false
从应用程序的根目录运行初始化任务

$ bundle exec wheneverize .
这将为您创建一个初始config/schedule.rb文件(只要 由于配置文件夹已存在于项目中)

(摘自创业板文档)

然后在
config/schedule.rb
中设置适当的调用时间参数。比如说

config/schedule.rb

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
  runner "Report.generate_csv"
end
schedule.rb的更多语法选项

评论后更新

霍普,你还处在Rails环境下。在应用程序根路径的
public
文件夹中创建文件

result_file = "#{Rails.root}/public/cards-excluded.csv"
CSV.open(result_file, 'w') do |csv|
  row_data.each { |ar| csv << ar }
end
其次,确保在自动加载路径上有lib文件。在您的
config/application.rb中检查它

config.autoload_paths += %W(#{config.root}/lib/*)
第三,以这种方式使用
报告
模块(
表示您在rails控制台,
rails c


如果此方法在您的模型中,您可以直接调用模型表单任务,您希望在哪里部署应用程序?一些云主机提供“调度器”或“crontab”。从那里,您可以调用rake任务@SimonFranzen Hi我正在aws上部署它,但我首先在本地进行测试。@AbhishekAravindan Hi我已经创建了一个脚本,在/project/scripts中运行我的任务。如何在该文件中进行数据库查询。您应该在/lib/tasks/sometask中定义任务。rakeComments不用于扩展讨论;这段对话已经结束。
config.autoload_paths += %W(#{config.root}/lib/*)
> Reports::Report.generate_csv