/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 クラスは、リクエストごとの読み込みで既に機能していました。起動ごとの読み込みに。これを行う正しい方法は何ですか?