1

是否有明确的指南或一些好的博客文章来了解自动加载在 Rails 3 中的工作原理?“找不到文件”和“未初始化的常量”错误是如此常见,如此令人沮丧。

自动加载机制的哪些部分是“来自 Ruby”,什么是“来自 Rails”?它是怎么运行的?为什么当文件明确存在于正确位置时却找不到文件?如果它找到文件,为什么它会抱怨“未初始化的常量”?

还是只是我在使用 Rails 一年后表现不佳?

4

2 回答 2

3

它使用Kernel#autoload. 从里:

= Kernel#autoload

(from ~/.ri)
------------------------------------------------------------------------------
  autoload(module, filename)   -> nil

------------------------------------------------------------------------------

Registers filename to be loaded (using Kernel::require) the
first time that module (which may be a String or a symbol) is
accessed.

  autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")

关于您遇到的“找不到文件”错误的问题,您可以将特定示例的详细信息添加到您的问题中吗?这将使您更容易为您提供帮助。

于 2012-09-15T06:55:13.697 回答
1

IMO 在 Rails 中自动加载和重新加载的最佳资源是关于主题http://guides.rubyonrails.org/autoloading_and_reloading_constants.html的 Rails 指南章节

为了理解这个 Rails 机制是如何工作的,你需要确保你理解 Ruby 常量查找是如何工作的,以及在 Ruby 中加载代码的不同方式是什么。

这不是一个简单的话题,正如 Sinatra 的创建者 Konstantin Haase 的这篇详细博客文章中所解释的那样。http://blog.rkh.im/code-reloading

于 2016-04-05T20:01:41.383 回答