バンドラーによるジェムの自動ロード

概要

私は、https://github.com/scionx-io/safe-eth-ruby/tree/bm-improve-test でホストされている、safe-eth-ruby という Ruby gem を開発しました。 gem はエラーなしでインストールおよびロードされますが、bundle exec irb で初期化された IRB 内の特定のモジュールに直接アクセスしようとすると、初期化されていない定数に関する問題が発生します。

例えば:

irb(main):001> SafeEthRuby::Protocol
# Results in: uninitialized constant SafeEthRuby::Protocol (NameError)

ただし、セッション内で gem を手動で要求する場合は、次のようになります。

irb(main):004> require "safe_eth_ruby"
=> true
irb(main):005> SafeEthRuby::Protocol
=> SafeEthRuby::Protocol

手動で要求した後は、すべてが期待どおりに機能します。 gem のコンポーネントが自動的に読み込まれない理由と、コンソールで毎回手動で gem を要求せずに確実に利用できるように設定する方法を理解したいと思います。私の gem セットアップに何が欠けているのか、または Ruby 構成に関するヒントがあれば、ご提案をいただければ幸いです。

ありがとう!

解決策

Bundle exec irb は、irb セッションで必要な gem を単純に制限します。自動的に必要になるわけではありません。

バンドル コンソールは自動的に「バンドル」をプリロードします。

ファイルは次のようになります (デフォルト)。

#!/usr/bin/env ruby

require "bundler/setup"
require "safe_eth_ruby"

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start

require "irb"
IRB.start(__FILE__)

現在の bin/コンソール ファイルには、require ‘safe_eth_ruby’ ではなく、require ‘safe’ が含まれています。