从shell运行Rails控制器方法?

时间:2012-12-17 23:47:37

标签: ruby-on-rails unix

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

1 个答案:

答案 0 :(得分:2)

如果您确实想要在crontab中发出网络请求,则可以在目标网址上拨打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任务。在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