1

定期購読しているユーザーに日次レポートをメールで送信したいと考えています。
そのために、データベースからデータを取得し、pdfkit/wkhtmltopdf を使用してそれを pdf に変換するアクションを reports_controller に記述しました。
get リクエストから呼び出された場合、アクションは正常に動作しますが、変換された場合は次のように定義されます

def self.dailymail
   ac = ActionController::Base.new()
   kit = PDFKit.new        #retrieve data from db  
   pdf = kit.to_pdf
   ReportMailer.send_reports(ac.send_data(pdf)).deliver
 end

rufusスケジューラで使用すると、send_data 呼び出しで例外が発生します。

RackDelegation#content_type= delegated to @_response.content_type=, but @_response is nil: #<ActionController::Base:0x206b068 @_routes=nil, @_action_has_layout=true, @_headers={"Content-Type"=>"text/html"}, ...


それで、私の質問はどうすればこの問題を解決できるか、またはレールにWindowsとLinuxの両方で公平に機能する代替スケジューラはありますか? データベースから取得したレポートを送信するのに役立つスケジューラ
を知りたいです。

4

2 に答える 2

0

rake タスクに関しては claasz に同意します。 Windows タスク スケジューラはサポートされていませんが、cron ジョブの作成はサポートされています

詳細についてはドキュメントを参照してください。ただし、基本的に、gem は、gem のインストール時に作成される schedule.rb ファイルで設定した内容に基づいて cron ジョブを作成します。

schedule.rb のサンプル コンテンツ:

every 3.hours do
  runner "MyModel.some_process"
  rake "my:rake:task"
  command "/usr/bin/my_great_command"
end

これは、bundle exec rake my:rake:task を 3 時間ごとに実行するようなものです。

schedule.rb を作成したら、スケジュールを cron に追加するために、コンソールから when コマンドを実行する必要があります。引数なしで when を実行すると、出力には schedule.rb の内容が表示されます。頭のてっぺんから覚えていないことを提供する必要がある引数があります。 --help を渡すだけで、答えが得られると思います。

お役に立てれば

EDIT:引数は-wでcron-tabに書き込みます

于 2012-12-07T20:07:06.097 に答える
0

willglynn がすでに指摘しているように、コントローラーとのやり取りはすべて削除する必要があります。ここでは単に必要がなく、物事が不必要に複雑になります。したがって、コードは次のようになります

def self.dailymail
   kit = PDFKit.new        #retrieve data from db  
   pdf = kit.to_pdf
   ReportMailer.send_reports(pdf).deliver
end

rufus スケジューラーに問題が発生した場合 (私にはわかりません)、rakeメールを送信するタスクを作成し、OS スケジューラー (Linux の cron など) を使用してそのタスクを呼び出すことができます。rake タスクがあると、テストにも便利です。

于 2012-12-07T15:07:14.323 に答える