LoginSignup
40
24

More than 5 years have passed since last update.

ActiveJobを実行するメモ

Last updated at Posted at 2016-11-19

Railsの機能にActiveJobというものがあって、これを使うとバックグラウンドで動くジョブを登録できたり、コマンドラインからRailsに触れたりするみたいです。
ActionCableの使い方を調べていて、サーバーのコマンドラインからクライアントに対して何かできたらいいなぁ〜と思っていたので、まずActiveJobの使い方を調べることにしました。

ジョブをつくる

railsコマンドで作成できるみたいです。

rails generate job HelloWorld

app/jobsディレクトリの下に、ファイルが作成されました。

create  test/jobs/hello_world_job_test.rb
create  app/jobs/hello_world_job.rb

作成されたファイルを開き、performメソッドの中に実行したいことを書いていくようです。

app/jobs/hello_world_job.rb
class HelloWorldJob < ApplicationJob
  queue_as :default

  def perform(*args)
    puts "ジョブが実行されたよ!\(^o^)/"
  end
end

ジョブを実行する

ジョブを作ったはいいけど、どうやって実行させればいいのかわかりません。どうしましょう。

rails consoleから実行する

とりあえずrails consoleから実行してみます。

rails console

ジョブを実行するにはperform_nowというクラスメソッドを実行します。

rails_console
HelloWorldJob.perform_now

こんな感じになりました。asyncって書いてあるので非同期で実行されたのでしょう。おそらく、ええはい、、、

2.3.0 :001 > HelloWorldJob.perform_now
Performing HelloWorldJob from Async(default)
ジョブが実行されたよ!\(^o^)/
Performed HelloWorldJob from Async(default) in 0.1ms
 => nil

コマンドラインから実行する

rakeコマンドを使えばできるような気がします。

rakeのタスクを作るのもrailsコマンドでできるみたいです。すごいですね!

rails generate task job helloworld

タスクはlibディレクトリの中に作成されるんですね。

create  lib/tasks/job.rake

作成されたファイルはこんな感じになっています

lib/tasks/job.rake
namespace :job do
  desc "TODO"
  task helloworld: :environment do
  end
end

説明と実行する処理を書いてこうなりました。

lib/tasks/job.rake
namespace :job do
  desc "HelloWorldJobを実行する"
  task helloworld: :environment do
    HelloWorldJob.perform_now
  end
end

実行してみます。
最近はrakeタスクの実行もrailsコマンドでやるみたいですね。知りませんでした。

console
rails job:helloworld

うまくいきました。

ジョブが実行されたよ!\(^o^)/
40
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
24