在我拥有的rails项目的控制器中,有一个辅助函数,它发送一封电子邮件,其中包含过去一周内完成的对数据库的所有更改。我在Unix上也有一个cron工作,每个周末都会运行一些与我的Web应用程序相关的bash脚本。有没有一种简单的方法可以从独立的.rb文件或bash脚本运行控制器的辅助函数?
答案 0 :(得分:2)
如果您确实想要在crontab中发出网络请求,则可以在目标网址上拨打wget
或curl
。
0 * * * * wget http://yourdomain.com/path/to/request -o /dev/null
如果您想要在Web请求的上下文之外执行此邮件程序,则此类行为不应出现在您的控制器中。这是lib/
的用途。
您可以创建包含
的lib/my_helpers.rb
文件
module MyHelpers
extend self
def your_mailer(some, params, here)
# runthe mailer
end
end
您可以将其包含在您想要的任何控制器中,甚至包括ApplicationController
include ::MyHelpers
只要包含它,您就可以简单地调用your_mailer(param1, param2, param3)
来执行它。
然后,您将从rake任务中包含此内容,并从crontab执行rake任务。在lib/tasks/your_mailer.rake
中创建一个类似这样的文件
include MyHelpers
namespace :myapp do
desc "Runs your_mailer"
task :mailer => :environment do
your_mailer(param1, param2, param3)
end
end