3

サーバーでいくつかの cron タスクを実行しており、次のように rails runner を使用してすべてを開始します。

rails runner 'MyTask.run'

MyTaskプロジェクト内のクラスです。問題は、何かが失敗した場合にエラーを処理するためにBugsnagを使用することです。rake タスクを実行すると、Bugsnag はエラーを保存し、Web サイトにリストします。しかし、これは を使用する場合には発生しませんrails runner。これが発生したときに Bugsnag にエラーを送信するように Rails を設定するにはどうすればよいですか?

4

1 に答える 1

5

Rails ランナーの構成やカスタマイズは非常に困難です。これは、実際には、この本体を持つスクリプトだけであるためです。

if code_or_file.nil?
  $stderr.puts "Run '#{$0} -h' for help."
  exit 1
elsif File.exist?(code_or_file)
  $0 = code_or_file
  Kernel.load code_or_file
else
  eval(code_or_file, binding, __FILE__, __LINE__)
end

ご覧のとおり、eval送信したコードを実行するだけなので、ラッパーも、拡張できるクラスも、基本的に構成できるものもありません。ランナーと同じように実行する rake タスクを作成することをお勧めしますが、今回は Rake によって制御される環境で行うため、必要なものすべてを構成できます。

desc 'Wraps a runner command with rake'
task :runner, [:command] => :environment do |t, args|
  eval(args[:command])
end

次に、次を使用して呼び出します

rake 'runner["MyTask.run"]'

これは を使用する場合と非常に似た方法でタスクを実行しrails runnerますが、rake のコンテキストで実行します (これには Bugsnag の使用が含まれます)。

于 2014-01-05T15:59:55.293 に答える