2012-12-17 114 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 結束 結束' –

相關問題