mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
More edits to the classic migration guide
This commit is contained in:
parent
f14b19a996
commit
9e4d31c702
1 changed files with 22 additions and 22 deletions
|
@ -162,7 +162,7 @@ Hold on, I am eager loading the application.
|
||||||
All is good!
|
All is good!
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Concerns
|
### Concerns
|
||||||
|
|
||||||
You can autoload and eager load from a standard structure like
|
You can autoload and eager load from a standard structure like
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ In that case, `app/models/concerns` is assumed to be a root directory (because i
|
||||||
|
|
||||||
The `Concerns::` namespace worked with the classic autoloader as a side-effect of the implementation, but it was not really an intended behavior. An application using `Concerns::` needs to rename those classes and modules to be able to run in `zeitwerk` mode.
|
The `Concerns::` namespace worked with the classic autoloader as a side-effect of the implementation, but it was not really an intended behavior. An application using `Concerns::` needs to rename those classes and modules to be able to run in `zeitwerk` mode.
|
||||||
|
|
||||||
#### Having `app` in the autoload paths
|
### Having `app` in the autoload paths
|
||||||
|
|
||||||
Some projects want something like `app/api/base.rb` to define `API::Base`, and add `app` to the autoload paths to accomplish that in `classic` mode.
|
Some projects want something like `app/api/base.rb` to define `API::Base`, and add `app` to the autoload paths to accomplish that in `classic` mode.
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ If you want to keep that structure, you'll need to delete the subdirectory from
|
||||||
ActiveSupport::Dependencies.autoload_paths.delete("#{Rails.root}/app/api")
|
ActiveSupport::Dependencies.autoload_paths.delete("#{Rails.root}/app/api")
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Autoloaded Constants and Explicit Namespaces
|
### Autoloaded Constants and Explicit Namespaces
|
||||||
|
|
||||||
If a namespace is defined in a file, as `Hotel` is here:
|
If a namespace is defined in a file, as `Hotel` is here:
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ won't work, child objects like `Hotel::Pricing` won't be found.
|
||||||
|
|
||||||
This restriction only applies to explicit namespaces. Classes and modules not defining a namespace can be defined using those idioms.
|
This restriction only applies to explicit namespaces. Classes and modules not defining a namespace can be defined using those idioms.
|
||||||
|
|
||||||
#### One file, one constant (at the same top-level)
|
### One file, one constant (at the same top-level)
|
||||||
|
|
||||||
In `classic` mode you could technically define several constants at the same top-level and have them all reloaded. For example, given
|
In `classic` mode you could technically define several constants at the same top-level and have them all reloaded. For example, given
|
||||||
|
|
||||||
|
@ -253,7 +253,23 @@ end
|
||||||
|
|
||||||
If the application reloads `Foo`, it will reload `Foo::InnerClass` too.
|
If the application reloads `Foo`, it will reload `Foo::InnerClass` too.
|
||||||
|
|
||||||
#### Spring and the `test` Environment
|
### Globs in `config.autoload_paths`
|
||||||
|
|
||||||
|
Beware of configurations like
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
config.autoload_paths += Dir["#{config.root}/lib/**/"]
|
||||||
|
```
|
||||||
|
|
||||||
|
Every element of `config.autoload_paths` should represent the top-level namespace (`Object`) and they cannot be nested in consequence (with the exception of `concerns` directories explained above).
|
||||||
|
|
||||||
|
To fix this, just remove the wildcards:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
config.autoload_paths << "#{config.root}/lib"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Spring and the `test` Environment
|
||||||
|
|
||||||
Spring reloads the application code if something changes. In the `test` environment you need to enable reloading for that to work:
|
Spring reloads the application code if something changes. In the `test` environment you need to enable reloading for that to work:
|
||||||
|
|
||||||
|
@ -270,7 +286,7 @@ reloading is disabled because config.cache_classes is true
|
||||||
|
|
||||||
This has no performance penalty.
|
This has no performance penalty.
|
||||||
|
|
||||||
#### Bootsnap
|
### Bootsnap
|
||||||
|
|
||||||
Please make sure to depend on at least Bootsnap 1.4.4.
|
Please make sure to depend on at least Bootsnap 1.4.4.
|
||||||
|
|
||||||
|
@ -310,22 +326,6 @@ RSpec.describe "Zeitwerk compliance" do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
### Globs in `config.autoload_paths`
|
|
||||||
|
|
||||||
Beware of configurations like
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
config.autoload_paths += Dir["#{config.root}/lib/**/"]
|
|
||||||
```
|
|
||||||
|
|
||||||
Every element of `config.autoload_paths` should represent the top-level namespace (`Object`) and they cannot be nested in consequence (with the exception of `concerns` directories explained above).
|
|
||||||
|
|
||||||
To fix this, just remove the wildcards:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
config.autoload_paths << "#{config.root}/lib"
|
|
||||||
```
|
|
||||||
|
|
||||||
New Features You Can Leverage
|
New Features You Can Leverage
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue