2012-12-17 76 views
1

在我有一个rails项目的控制器中,有一个辅助函数可以发送一封电子邮件,其中包含上周完成的对数据库所做的所有更改。我在Unix上也有一个cron作业,每个周末都会运行一些与我的web应用程序相关的bash脚本。有没有一种简单的方法来从独立的.rb文件或bash脚本运行控制器的辅助函数?从shell运行Rails控制器方法?

+1

我的第一本能会辅助功能移动到自己的类,也许在'lib'创建lib/tasks/your_mailer.rake文件。 –

回答

2

如果您确实想要在您的crontab中发出Web请求,您可以在目标URL上调用wgetcurl

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任务。像这样的东西

include MyHelpers 

namespace :myapp do 
    desc "Runs your_mailer" 
    task :mailer => :environment do 
    your_mailer(param1, param2, param3) 
    end 
end 
+0

当我尝试运行这个时,我得到一个'未初始化的常量MailerHelper'。尽管如此,这是非常有帮助的! –

+0

确保'config/application.rb'具有'config.autoload_paths + = Dir [“#{config.root}/lib”]' – deefour

+0

仍然出现问题。 在/lib/mailer_helper.rb '模块MailerHelper 延伸自 DEF summaryemail @date = DateTime.now.beginning_of_week.strftime( '%M /%d /%Y') SummaryMailer.weekly_email(@date ).deliver 结束 end' 在/lib/tasks/mailer_helper.rake '包括MailerHelper 命名空间:状态做 desc “的运行梅勒” 任务:邮件=>:环境做 summaryemail 结束 结束' –

相关问题