Rails 3在config / environments / development.rb中从lib加载类的问题

时间:2011-09-12 21:32:19

标签: ruby-on-rails ruby-on-rails-3 rails-3-upgrade

我正在努力将Rails 2.3.11应用升级到3.0.10。当我尝试运行NameError之类的任何rails脚本或运行我的单元测试时,我在development.rb文件中收到rails 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"]

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要明确require文件,而不是依赖自动加载。

这是因为在自动加载路径设置之前,在启动过程的早期就会加载环境配置。

在某些情况下,您可以使用初始化程序将配置代码插入到可以工作的位置,例如:

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

不幸的是,这不是其中一种情况,因为缓存设置为here,而自动加载路径直到here之前才设置,紧接着boostrap_hook