1. ホーム
  2. ruby-on-rails

[解決済み】Rails 4でlibファイルを自動ロードする方法

2022-04-05 12:19:42

質問

私は、以下の行をイニシャライザーで使用して、コードを自動ロードしています。 /lib ディレクトリを作成します。

config/initializers/custom.rb です。

RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?

から Rails 3 クイックヒント: 開発モードでの lib フォルダの自動再読み込み )

リクエストのたびにライブラリをロードするのではなく、起動時にロードしたいのです。同じブログで 別記事 を行う方法を説明しています。

config/application.rb:

# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

しかし、それに切り替えると、開発中であっても、libの関数を使おうとするとNoMethodErrorsが発生します。

私のlibファイルの一例。

lib/extensions.rb。

Time.class_eval do
  def self.milli_stamp
    Time.now.strftime('%Y%m%d%H%M%S%L').to_i
  end
end

呼び出し Time.milli_stamp は NoMethodError をスローします。

SOで他の人が同じような質問に答えているのは知っていますが、どれも命名規則や他の問題を扱っているようで、以前は気にする必要がなかったのですが、私のlibクラスはすでに 働く をリクエストごとのロードに変更したいだけです。 スタートアップ を読み込んでいます。正しい方法は何でしょうか?

どのように解決するのですか?

これで解決できるかもしれませんね。

  1. config/application.rb :

    config.autoload_paths << Rails.root.join('lib')
    
    

    で正しい命名規則を維持します。 lib .

    lib/foo.rb :

    class Foo
    end
    
    

    lib/foo/bar.rb :

    class Foo::Bar
    end
    
    
  2. のように、ファイル内で猿真似をしたい場合。 lib/extensions.rb のように、手動で要求することができます。

    config/initializers/require.rb :

    require "#{Rails.root}/lib/extensions" 
    
    

追伸