3

私はそのように定義されたクラスを持っています:

class PublicationJob < ActiveJob::Base
  def self.jobs
    @jobs ||= Hash{|h, k| h[k] = []}
  end
  def self.register(format, job_class)
    jobs[format] << job_class
  end
  # [...]
end

さまざまなジョブ クラスを登録するために、イニシャライザを追加しました。

PublicationJob.register(:tex, SaveJob)
PublicationJob.register(:saved_tex, TexJob)
#...

rails console私が試しているのは:

PublicationJob.jobs
#> {:tex => [SaveJob], :saved_tex => [TexJob]}

しかし、コンソールを終了 (Ctrl-D) してから再起動すると、ある時点でハッシュが空になります!

この場合、クラス変数がリセットされるのはなぜですか?

Rails 4.2.1 と spring を使用していますが、spring を強制終了/停止すると、しばらくの間は再び機能することがわかっています。春と関係あるの?

4

2 に答える 2

2

さて、これは完全にSpringに関連していたので、Springを削除して修正しました.

ドキュメントの正しい部分を教えてくれた @NekoNova のおかげで、次のことがわかりまし

これにより、User クラスの最初のバージョンが保存されます。これは、コードがリロードされた後、User と同じオブジェクトではなくなります。

[...]

したがって、この問題を回避するには、初期化コードでアプリケーション定数への参照を保存しないでください。

つまり、イニシャライザを使用してクラスを初期化することはできません。本番環境では機能しますが、開発環境では機能しないためです。

于 2015-04-17T09:09:09.413 に答える