Xavier, Thanks for the example, but I'm confused because:
1. Classes couldn't load in the first place if there was no way to load them because of interdependency problems. Rails initially autoloads these files without problems. 2. I would think that you shouldn't get an infinite loop in this case if you keep track of what needs to be loaded, and because of that, it is aware that there is a circular reference I assume by checking that without letting a SystemStackError occur before you find that out. So why not: A. Keep that list of things to load. B. Try to load them in as sane an order as possible based on dependencies that are known. C. For things with circular dependency, put those in a bucket of unknown order (hopefully there aren't too many) and use the "try and try again" approach iterating through things that need to be loaded, only stopping when you cannot load anything else in the list to be loaded in that iteration. I know it is *much* more complicated than that and there is a lot of history that goes with Rails autoloading and why things are the way they are, but you have to admit, it makes no sense that Rails can autoload everything on start and you can manually load (via load) files after you remove_const'd it, but it just "gives up" if it detects a circular reference when trying to autoload a single (class) constant you remove_const'd. But my lame suggestion there I know does not help as much since you need something to use to reproduce. I'm just not sure yet how to do that simply. The more worrying thing to me is that this is not just a "Circular dependency detected while autoloading constant" problem, but also possibly (unless is a different problem that is also related to autoloading) InverseOfAssociationNotFoundError problem, so it is definitely mucking things up. On Friday, February 21, 2014 10:56:46 AM UTC-5, Xavier Noria wrote: > > OK. > > The basic idea of the circular dependency control is to detect this: > > $ cat a.rb > B > A = 1 > > $ cat b.rb > A > B = 1 > > If some code triggers autoloading of A (or B), you'd get an infinite loop. > To halt the loop you'd need to get an object defined to the constant > somehow, but the code wouldn't ever reach that point. > > In any case, if you guys could open an issue in GitHub with a minimal way > to reproduce the problem we'd look into it. > > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/groups/opt_out.
