2016-07-01 12 views
3

私は1時間に1回、cronで実行しようとしているrailsアプリケーションとrakeタスクを持っています。しかし、タスクはレール環境と私のレールアプリケーションのいくつかのクラスを使用することです。私がrubyスクリプトとして実行する場合、使用するすべての依存関係を含める必要があります。正しく、簡単に行うことはできません。だから私はそれをすべての依存関係を保存するので、レーキタスクとして実行する必要がありますよね?では、どのようにしてcronからrakeタスクを実行できますか?rakeタスクをcronで実行するにはどうしたらいいですか?

必要性がない場合は、サードパーティのソリューションを使用しないことをお勧めします。この場合、宝石などはいつでも使用したくありません。

task :foo => :environment do 
    puts "Running rake task in environment: #{Rails.env}" 
    # can access Models here or whatever 
end 

=> :environment一部はオプションですが、それはどのようなタスクブロックにあなたのRailsの環境を作ること:ここで

+0

コンソールからそれを実行したとき、あなたはそれを動作させるために入力するのですか?そのコマンド文字列をあなたのcrontabに置くことができます。 –

+0

いつでもチェックアウトし、多くの人生をシンプルにする:-) https://github.com/javan/whenever –

+0

これをチェック:https://stackoverflow.com/questions/31482131/only-with-cron-usr-bin-env- ruby-executable-hooks-no-such-file-or-directory –

答えて

1

はrakeタスクの例です。

rake run_my_taskをcronジョブに入れることができます。

cronがRailsルートディレクトリからタスクを実行するには、cd /home/$USER/my_rails app && rake run_my_taskのようなものを使用する必要があります。

7

あなたのcrontabにこれは毎時間foo:barタスクを実行し、log/cron.logstdoutstderrを書きます

0 * * * * /bin/bash -l -c 'cd /path/to/your/project && bundle exec rake foo:bar >> log/cron.log 2>&1' 

のようなものを追加することができます。

rakeコマンドの前にbundle execに注意してください。
バンドラを使用すると、そのタスクが正しい環境を取得することが保証されます。

あなたは

... && RAILS_ENV=production bundle exec rake foo:bar 
関連する問題