繁体   English   中英

Rails加载路径问题

[英]Rails load path questions

假设我有一些不属于模型,控制器等的自定义类,我应该把它放在/ lib中吗?

在rails <3中,我将此目录添加到我的加载路径和rails 3+中,我将其添加到我的autoload_path。 这个对吗?

现在说我有一些扩展已经定义的类的类。 我应该把它放在哪里,以便它在启动时运行。 例如,我想在String上添加方法'foo'。

class String
  def foo
    'foo;
  end
end

我应该把这个类放在哪里,以便它在启动时定义?

我遇到的另一个奇怪的错误是当我尝试在lib中命名空间时。

module MyProject
 class Foo
 end
end

现在在控制台中:

ruby-1.9.2-p136 :004 > MyProject::Foo
LoadError: Expected /Users/me/workspace/my_project/lib/foo.rb to define Foo
 from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:492:in `load_missing_constant'
 from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:183:in `block in const_missing'

我一直收到这个错误。 我该如何加载这个文件?

在rails 3中,config / application.rb中禁用了自动加载路径

#config.autoload_paths += %W(#{config.root}/extras)

如果要从lib目录加载代码,则必须取消注释此行。

您通常可以将类文件放在任何位置,例如,您可以将它们放在app / others中,并将目录添加到Rails 2中的load_path或Rails 3中的autoload_path。

要扩展已定义的类,您可能希望将这些文件放在config / initializers目录中。

要修复你提到的bug,你应该在你的foo.rb文件中定义Foo类,并确保模块名称匹配(Bags和MyProject)。

名称更改为自动加载的原因是autoload_paths中的类实际上是自动加载的,而不是简单地加载 这是在Ruby中使用'autoload'和'require'之间的区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM