質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

2回答

4931閲覧

ruby on railsのActiveJobが読み込めない?

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

1グッド

1クリップ

投稿2016/04/13 17:50

ruby on railsのActiveJobについて質問します

ruby :2.3.0
rails : 4.2.5

rails g でjobを作り下記のように記述しました。

[app/jobs/sample_job.rb]
class SampleJob < ActiveJob::Base
queue_as :default

def perform()
logger.debug "test"
end
end

コントローラーから読み込もうと下記のように書きました。
def show
SampleJob.perform
end

実行すると
(NameError)uninitialized constant SampleController::SampleJob
とエラーが出ます。

auto_loaderのパスも確認しましたが、jobに通っていました。

このエラーの原因と改善方法を教えてください

chiochio👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

unicornの再起動ミスでした。

新しくjobファイルを作りunicornの停止と起動をやり直したところ正常に動作しました。

投稿2016/04/17 08:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このように参照したい場合はクラスメソッドとして定義する必要があります。

ruby

1SampleJob.perform

これだとインスタンスメソッドになってしまっているので、

ruby

1def perform()

メソッド名にselfをつけてクラスメソッドにしてみてはいかがでしょう?

ruby

1def self.perform()

投稿2016/04/14 01:48

ShoheiUyama

総合スコア206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/14 13:20

def self.perform() に変更してみましたが 同じエラーが出てしまいます
ShoheiUyama

2016/04/15 05:15

http://qiita.com/ryohashimoto/items/2f8fd685920a5318def4 このサイトを参考にActiveJobを使ってみましたが、正常に動きました。 def self.perform() は def perform() で良いようですね。 def perform(user)というメソッドを定義して、コントローラ側で Hoge.perform_later(@user)としたら呼び出し出来てます。 参考にしてみてください。
退会済みユーザー

退会済みユーザー

2016/04/16 15:14 編集

別のサーバーを使い記事の通り使うと正常に動作しました。 しかし、エラーが出たサーバーでは以下のようにエラーが出ます。 uninitialized constant SampleController::SampleJob autoloaderのパスも確認しましたが、パスは通っているようで nginxもunicornも再起動してみましたが、上記と同じエラーがでます。 rails cから行うと正常に動作しました。 コントローラからの呼び出す場合のみうまくいかないようです。 どうしたらいいでしょうか...? --追記-- irbからGETリクエストを送ったところ正常に動作しました。 ブラウザからページにアクセスする場合のみエラーが出るみたいです..
退会済みユーザー

退会済みユーザー

2016/04/17 08:03

requier './app/jobs/sample_job.rb' で正常に動作しました。 もう一度新しいjobを作成し確認したところ、どうやらunicornの再起動がうまく出来ていなかったみたいです。 unicornの停止→起動で正常に動作しました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問