2017-06-07 8 views
0

私は単に特定の時間に実行する関数を取得しようとしていますが、私は大したことはありません。私はちょうど私がDelayed_jobがRoRで動作していないか、何か不足していますか?

#Gemfile 

gem 'delayed_job_active_record' 

をやったの基礎を介して実行してみましょう
#config/application.rb 

module SampleApp 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 
    config.active_job.queue_adapter = :delayed_job 
    end 
end 

#Ran from command line 

[06.07.2017/15:38:02] [email protected] $ rails g delayed_job:active_record 
Running via Spring preloader in process 72879 
    identical bin/delayed_job 
     chmod bin/delayed_job 
     create db/migrate/20170607203821_create_delayed_jobs.rb 
[06.07.2017/15:38:21] [email protected] $ rake db:migrate 
== 20170607203821 CreateDelayedJobs: migrating ================================ 
-- create_table(:delayed_jobs, {:force=>true}) 
    -> 0.0088s 
-- add_index(:delayed_jobs, [:priority, :run_at], {:name=>"delayed_jobs_priority"}) 
    -> 0.0051s 
== 20170607203821 CreateDelayedJobs: migrated (0.0142s) ======================= 

[OK]をので、私は基本的には、次に呼び出す、post_nowを呼び出し、私の見解上のボタンを持っています私が持っているカスタムモデル内の機能。ここで私が持っているものの例です:

#posts_controller.rb 
    def post_now 
    set_post 
    submit_post = SchedulePost.delay(run_at: 1.minute.from_now).schedule_post(@post) 
    redirect_to posts_path, flash: {success: submit_post[1] } 
    end 

してから、ここで簡単に(今のところ)テキストファイルを書き込んでいるSchedulePostクラスは、だ

#models/schedule_post.rb 
class SchedulePost < ActiveRecord::Base 
    def self.schedule_post(post) 
     command = "touch #{Rails.root}/public/test.txt" 
     system(command) 
     return 
    end 
end 

それでは、私が起こることを期待していするということですpost_nowが呼び出されると、今から1分後にschedule_post関数を実行することになっています。これは単純にテキストファイルを書き込むことになっています。 .delay(run_at: 1.minute.from_now)ブロックを削除してそのままschedule_postのままにしておくと、正常に動作します。だから私は間違いなくここで遅延機能を使って何か間違っています。

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

答えて

1

あなたが

rake jobs:work 
+0

ガッチャを行うアプリケーションのルートディレクトリから端末に...遅延タスクを実行するためにdelayed_jobワーカーを起動する必要があります。どのように私はこれをバックグラウンドできますか?これをバックグラウンドで実行させるために 'rake jobs:work&'を実行するだけですか? – LewlSauce

+0

これは、あなたの背景のウォーカーです。これは、主要な作業者(サーバー)から独立して独立しています。コマンドを実行するだけで、スポーンされた時点でタスクを実行し続けることができます。 –

+0

Ok。私はちょうどこれが起こっている間に1つ少ないターミナルを開けたかったが、私はあなたが言っているものを得る。ありがとう! – LewlSauce

関連する問題