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
のままにしておくと、正常に動作します。だから私は間違いなくここで遅延機能を使って何か間違っています。
ご協力いただければ幸いです。
ガッチャを行うアプリケーションのルートディレクトリから端末に...遅延タスクを実行するためにdelayed_jobワーカーを起動する必要があります。どのように私はこれをバックグラウンドできますか?これをバックグラウンドで実行させるために 'rake jobs:work&'を実行するだけですか? – LewlSauce
これは、あなたの背景のウォーカーです。これは、主要な作業者(サーバー)から独立して独立しています。コマンドを実行するだけで、スポーンされた時点でタスクを実行し続けることができます。 –
Ok。私はちょうどこれが起こっている間に1つ少ないターミナルを開けたかったが、私はあなたが言っているものを得る。ありがとう! – LewlSauce