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