LoginSignup
0
0

More than 1 year has passed since last update.

Rubyでクラスが定義されていないエラーに遭遇(DRb::DRbUnknown)

Posted at

image.png

dRubyというRubyのスタンダードライブラリにあるプロセス間の通信を可能にするものがあります。

これを使って、バックエンドジョブのGemを今作っています。

Belated

用途としては主にRedis, PostgreSQLが使えない、純粋にRuby, SQLiteだけを使う場合に使えるものとして作っています。
(まだちゃんと使えるものではないですが。。。)

ちょっと試しているときに、DRb::DRbUnknownというエラーに遭遇しました。

以下のようなコードでした。

$ bundle exec belated # Belatedのプロセスを起動

Railsのコンソールのなか:

class Hello
  def perform
    puts 'hello world'
  end
end
client = Belated::Client.new
client.perform_belated(Hello.new)

これでDRb::DRbUnknownというエラーになりましたが、原因はBelatedの方はこのコードにアクセスできていないからです。Railsのコンソールで新しく定義したクラスだからですが、ここでこのオブジェクトに対してreloadを実行して、定義されているかどうかを試すこともできるみたいです。

考えてみれば当たり前ですが、普段一つのプロセスの中でしか動いていないプログラムを書いているとなかなかここまで考えないですね。
Sidekiqのコードを読むと、Reloaderというクラスにも遭遇しますので、そこも開発環境の考慮が入っているみたいです。

詳細はこちらで確認できます:
https://docs.ruby-lang.org/ja/latest/class/DRb=3a=3aDRbUnknown.html

0
0
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
0
0