Zec*_*eck 22 ruby ruby-on-rails ruby-on-rails-3
我是铁杆新手.我在lib目录中有一个设置,如下所示:
lib/
blog/
core/
search/
base.rb
Run Code Online (Sandbox Code Playgroud)
base.rb也定义了Base类:
module Blog
module Core
module Search
class Base
attr_accessor :properties
def initialize(params)
@properties = {}
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的application.rb中有以下代码
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Run Code Online (Sandbox Code Playgroud)
当我将它包含在posts控制器中时,我会收到以下错误:
LoadError in PostsController#index
Expected /home/usr/code/blog/lib/blog/core/search/base.rb to define Base
Run Code Online (Sandbox Code Playgroud)
任何的想法?我正在使用rails 3.2.5和RVM.谢谢你的建议.
更新:添加了我的完整堆栈:
Started GET "/admin/posts" for 127.0.0.1 at 2012-06-08 21:06:18 +0800
LoadError (Expected /home/usr/code/blog/lib/blog/core/search/base.rb to define Base):
app/controllers/admin/base_controller.rb:5:in `<top (required)>'
app/controllers/admin/posts_controller.rb:6:in `<top (required)>'
Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.6ms)
Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (7.0ms)
Run Code Online (Sandbox Code Playgroud)
Waw*_*Loo 39
我有同样的问题.它来自于你尝试加载的事实/lib/blog/core/search/base.rb直接在application.rb中与/lib/**/
我有错误:
Expected /[...]/myapp/lib/durative/base.rb to define Base (LoadError)
Run Code Online (Sandbox Code Playgroud)
目录结构:
lib/
--durative/
--base.rb
Run Code Online (Sandbox Code Playgroud)
base.rb:
module Durative
class Base
def initialize(config)
@config = {}
end
#...
end
end
Run Code Online (Sandbox Code Playgroud)
application.rb中:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Run Code Online (Sandbox Code Playgroud)
目录结构:
lib/
--durative.rb **(added)**
--durative/
--base.rb
Run Code Online (Sandbox Code Playgroud)
durative.rb:
require 'durative/base'
Run Code Online (Sandbox Code Playgroud)
base.rb(无变化)
application.rb(已更改):
config.autoload_paths += Dir["#{config.root}/lib/"]
Run Code Online (Sandbox Code Playgroud)
告诉我们它是否也适合你.
我遇到过同样的问题.问题是因为我在不包括他们的父lib目录的情况下包含了子目录:
# did not work
config.autoload_paths += %W(#{config.root}/lib/foo)
Run Code Online (Sandbox Code Playgroud)
和
# in lib/foo/my_class.rb
module Foo
class MyClass
end
end
Run Code Online (Sandbox Code Playgroud)
Foo :: MyClass将返回Expected以定义MyClass
将lib目录添加到config.autoload_paths可以解决问题
# worked
config.autoload_paths += %W(#{config.root}/lib #{config.root}/lib/foo)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15468 次 |
| 最近记录: |