是否有明确的指南或一些好的博客文章来了解自动加载在 Rails 3 中的工作原理?“找不到文件”和“未初始化的常量”错误是如此常见,如此令人沮丧。
自动加载机制的哪些部分是“来自 Ruby”,什么是“来自 Rails”?它是怎么运行的?为什么当文件明确存在于正确位置时却找不到文件?如果它找到文件,为什么它会抱怨“未初始化的常量”?
还是只是我在使用 Rails 一年后表现不佳?
是否有明确的指南或一些好的博客文章来了解自动加载在 Rails 3 中的工作原理?“找不到文件”和“未初始化的常量”错误是如此常见,如此令人沮丧。
自动加载机制的哪些部分是“来自 Ruby”,什么是“来自 Rails”?它是怎么运行的?为什么当文件明确存在于正确位置时却找不到文件?如果它找到文件,为什么它会抱怨“未初始化的常量”?
还是只是我在使用 Rails 一年后表现不佳?
它使用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")
关于您遇到的“找不到文件”错误的问题,您可以将特定示例的详细信息添加到您的问题中吗?这将使您更容易为您提供帮助。
IMO 在 Rails 中自动加载和重新加载的最佳资源是关于主题http://guides.rubyonrails.org/autoloading_and_reloading_constants.html的 Rails 指南章节
为了理解这个 Rails 机制是如何工作的,你需要确保你理解 Ruby 常量查找是如何工作的,以及在 Ruby 中加载代码的不同方式是什么。
这不是一个简单的话题,正如 Sinatra 的创建者 Konstantin Haase 的这篇详细博客文章中所解释的那样。http://blog.rkh.im/code-reloading。