2016-04-18 8 views
1

私は、ロジックを処理するために/ libにモジュールメソッドを作成したレールに非常に小さなアプリケーションを作成しました。いつでもGem with Railsモジュールメソッドを使用することができます

また、設定した時間にモジュールメソッドを実行するように設定しました。私はreadme from Wheneverとこれらのpreviouspostsをうまくいけば正しく設定されています。例は次のように引用されているが、READMEを見てみると

は:

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

every 1.day, :at => '4:30 am' do 
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning" 
end 

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot 
    runner "SomeModel.ladeeda" 
end 

私の質問したがって、されるたびに、モデル内のメソッドを参照する必要があるのでしょうか?または/ libのモジュールメソッドを参照できますか? Looking at this postモデルにメソッドを持たなければならないことを暗示しているようです。

私の問題は、データベースがないためモデルがないことです。

ご協力いただければ幸いです。

答えて

0

任意のクラスまたは任意のモジュールのメソッドを参照できます。 (モジュールはインスタンス化できないクラスです)。

モジュールのメソッド間でやりとりする必要のある中間データがある場合は、モジュールをインスタンス化できるPORO(普通の古いRubyオブジェクト)クラスにするのに役立ちます(newinitializeメソッドを使用する)そのオブジェクトのすべてのインスタンスメソッドで利用可能な値をattr_accessorに格納することができます。

+0

こんにちは@SteveTurczynあなたの答えに感謝します。それは私のために少し良いことを明確にします。私は@Uzbekjonの答えを、私が間違っていたことについて、そしてなぜ私がいつものReadme構文で混乱していたと答えました。基本的に '' Runner "MyModel.some_process"の 'MyModel'は完全に私を投げました。 – Cliff

0

モデルでのみメソッドを呼び出す必要はありません。あなたの現在のスコープでクラス/モジュールが利用可能/アクセス可能であれば、それを呼び出すことができます。 runnerはモデルにアクセスすることができるので、レールアプリをロードするためにいつも宝石をセットアップしているはずです。つまり、あなたの/libフォルダ内のどのクラス/モジュールにもアクセスできます。

だから、先に行くと、あなたのたびに、次に呼び出し:

every 3.hours do 
    runner "YourModule.some_method" 
end 

ごRailsのに特定の機能を使用していない場合、私はRailsのENVをロードしないようお勧めします。重要なリソースを節約すると、パフォーマンスが向上します。

また、処理を実行するrakeタスクを作成して代わりに呼び出すこともできます。メリットとして、自分で呼び出して自分自身をテストできるレーキタスクに終わるでしょう。

every 3.hours do 
    rake "cron:my_process" 
end 
+0

こんにちは@Uzbekjon あなたの答えをありがとう。あなたにもっと洞察を与えるために、私が質問したのは、route.rbファイルからモジュールメソッドを呼び出そうとしていて、動作していないと想像できるからです。 完全なアマチュアの動きで、私はcronからエラーを出力する正しい方法を定義していませんでした。私がこれをしたとき、私は問題を解決したエラーを受け取りました: '/ bin/bash:bundle:command not found' – Cliff

関連する問題