2

Rails2.3.11アプリを3.0.10にアップグレードしています。のようなrailsスクリプトのいずれかを実行しようとしたり、単体テストを実行したりするNameErrorと、ファイルにが含まれます。development.rbrails console

で定義したクラスを呼び出していますが、クラスを呼び出すlibときにライブラリがロードされていないようですdevelopment.rb

私は次のようなことをしています:

config.cache_store = CustomMemcachedStore.new(Memcached.new(...))

lib/custom_memcached_store.rbクラスを宣言するファイルがあります

class CustomMemcachedStore < ActiveSupport::Cache::Store

次のエラーが発生します。

~/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing': uninitialized constant CustomMemcachedStore (NameError)
    from ~/app_name/config/environments/development.rb:20:in `block in <top (required)>'

application.rb、私はすでに使用しています

config.autoload_paths += Dir["#{Rails.root}/lib"]

あなたが私に与えることができるどんな助けにも感謝します。

4

1 に答える 1

1

require自動ロードに依存するのではなく、ファイルを明示的に作成する必要があります。

これは、自動ロードパスが設定される前に、起動プロセスの早い段階で環境構成のロードが行われるためです。

場合によっては、イニシャライザーを使用して、次のような方法で、機能する場所に構成コードを挿入できます。

initializer "my_setup", :before => "some_other_setup" do |app|
  # ...
end

残念ながら、これはそのようなケースの1つではありません。これは、キャッシュがここに設定されているのに対し、自動ロードパスはここまで、の直前に設定されていないためboostrap_hookです。

于 2011-09-13T05:39:56.583 に答える