ΠΠ°ΠΊ Π²Π½Π΅ΡΡΠΈ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ Π² windows 7: ΠΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ Windows 7, 10
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠ°ΠΊ Π·Π°ΠΉΡΠΈ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ ΠΠΈΠ½Π΄ΠΎΠ²Ρ 7
ΠΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Windows 7 ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π·Π°ΠΌΠ΅ΡΠ°ΡΡ Π·Π°ΡΠΎΡΠΌΠΎΠΆΠ΅Π½Π½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΠ° ΡΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ Π²Π»ΠΈΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ: ΠΏΠ΅ΡΠ΅Π³ΡΠ΅Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ Π²ΠΈΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π΅Π½Π½ΠΎΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΡΠ½ΠΈΡΡ ΠΏΡΠΈΡΠΎΠ΄Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΠ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
- ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Windows 7
- Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π°
- Π‘ΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ
- ΠΠ° ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅
- Π‘ΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΡΠ΅Π΅ΡΡΡΠ°
- Π‘ΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
- ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Windows 7
ΠΠΌΠ΅Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΏΡΡΠΌΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ: ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π² ΠΠΈΠ½Π΄ΠΎΠ²Ρ 7, ΡΠ΅ΠΌ Π΄ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ, ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π²ΠΈΡΠ°ΡΡ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠΈΠ»ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π° ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΎΠ±ΡΠΈΡΠ½ΡΠΌ.
ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ°ΠΉΠ»Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° ΡΡΠ΅Π±ΡΡΡ ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΈΠ½Π°ΡΠ΅ ΠΠ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π² ΠΠΈΠ½ 7 ΡΡΡΠ»ΠΎΠΊ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°ΠΉΡΠΈ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ ΠΠ‘ Windows 7.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π°
Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅:
- ΠΠ°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΡΡΠΊΒ»;
- ΠΠ°Π»Π΅Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΡΡΡΠΎΡ Π½Π° ΡΡΡΠΎΠΊΠ΅ Β«ΠΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡΒ»;
- ΠΠ°ΡΠ΅ΠΌ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΡΠ½Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π°ΠΆΠ°ΡΡ Π½Π° Β«ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ°Β».
ΠΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ΅.
Π‘ΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
- Π§Π΅ΡΠ΅Π· ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΡΡΠΊΒ» Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π½Π°Π±ΡΠ°ΡΡ Β«msconfigΒ»;
- ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΠ²ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ;
- ΠΠ°ΡΠ΅ΠΌ ΠΎΡΠΊΡΡΡΡ Π·Π°ΠΊΠ»Π°Π΄ΠΊΡ Β«ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ°Β»;
- ΠΠΎΡΠΎΠ²ΠΎ! ΠΠ΄Π΅ΡΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ.
ΠΠ° ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅
ΠΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠΎΡΠΎΠΏΠΈΡΡΡΡ Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΡΠ΅Ρ ΡΠ»ΡΠΆΠ±, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π±Π΅Π· ΡΠ°Π·Π±ΠΎΡΠ°, Ρ.ΠΊ. ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ»ΡΠΆΠ±Ρ, Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΠΈΠ½ 7.
ΠΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΡ ΠΈ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠ½Ρ Β«Π‘ΠΊΠ°ΠΉΠΏΠ°Β», ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Π²Π°ΠΆΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Ρ.ΠΏ. ΠΠ΅Π½ΡΠΆΠ½ΡΠ΅ ΠΈ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ±ΡΠ°ΡΡ, Π° Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ Π²Π½ΠΎΠ²Ρ, Π²Π΅Π΄Ρ ΠΎΠ½ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ Π½Π°ΠΉΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ ΠΈ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΡ ΡΡΡΠ΄Π°, ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π² Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ.
Π‘ΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΡΠ΅Π΅ΡΡΡΠ°
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΡΠΎΠ±ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅. Π§Π°ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠΈΠ»ΠΈΡ ΡΡΠ°Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΡΡΠ°ΡΡΡΡ ΠΎΡ ΡΠ»ΡΠΆΠ± ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ Π½Π΅ Π²ΠΈΠ΄Π½Ρ Π² ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ
Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ½ΡΡ
Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈΡ
ΡΠ°Π±ΠΎΡΡ. Π Π΅Π΄Π°ΠΊΡΠΎΡ ΡΠ΅Π΅ΡΡΡΠ° Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΠ²ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Β«Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡΒ».
Π‘ ΡΡΠΎΠΉ ΡΠ΅Π»ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- Π£Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΡ Β«WinΒ» ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° Β«RΒ», ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΌΠ΅Π½Ρ Β«ΠΡΠΏΠΎΠ»Π½ΠΈΡΡΒ»;
- ΠΠ°Π»Π΅Π΅ Π½Π°Π±ΡΠ°ΡΡ Β«regeditΒ» ΠΈ Π½Π°ΠΆΠ°ΡΡ Π½Π° Β«EnterΒ»;
- ΠΠ°ΡΠ΅ΠΌ Π² ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΡΠ΅Π΅ΡΡΡΠ° Π²ΠΎΠΉΡΠΈ Π² Β«HKEY CURRENT USERΒ»;
- ΠΠΎΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΊΡΡΡΡ Β«SoftwareΒ» ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Β«MicrosoftΒ»;
- ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° Β«WindowsΒ» ΠΈ Π΄Π°Π»Π΅Π΅ ΠΎΡΠΊΡΡΡΡ Β«CurrentVersionΒ» ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Β«RunΒ»;
- ΠΠΎΡΠΎΠ²ΠΎ! ΠΠ΄Π΅ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΉ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ.
Π‘ΠΏΠΎΡΠΎΠ± Π²Ρ ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΎΠΌΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠΊΡΡΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° Windows 7 Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΈΠ»ΠΈΡΡ Β«CCleanerΒ».
ΠΡΠΎΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π°ΠΆΠ°ΡΡ Π½Π° Β«ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΒ»;
- ΠΠ°Π»Π΅Π΅ ΠΎΡΠΊΡΡΡΡ Β«ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ°Β»;
- Π§ΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠ»Π°Π²ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Β«ΠΡΠΊΠ»ΡΡΠΈΡΡΒ».
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ½ΠΊΡ Β«ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ WindowsΒ».
ΠΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ Π² Windows 7, 8, 10.
Π ΡΡΠ°ΡΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ Windows 10, 8, 7 Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Autorun Organizer.
Π§Π°ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΡΠ°ΠΊΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ: ΡΡΠ΅ΠΉ ΡΠΏΡΠ°Π²Π° Π²Π½ΠΈΠ·Ρ, Π²ΠΎΠ·Π»Π΅ ΡΠ°ΡΠΎΠ², Π·Π°Π±ΠΈΡ ΠΊΡΡΠ΅ΠΉ ΠΈΠΊΠΎΠ½ΠΎΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π°ΡΠ΅ΠΌ Π΅ΠΌΡ ΡΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠΊΠΎΠ² (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ) ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ Π½Π° ΡΡΠ°ΡΡΠ΅ Windows, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·Π²ΠΎΠ΄ΡΡ ΡΡΠΊΠ°ΠΌΠΈ:
- ΠΠ½ΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ.
- Π’Π°ΠΊ Π²ΡΠ΅Π³Π΄Π° ΠΈ Π±ΡΠ»ΠΎ.
- Π― ΡΡΠ΄Π° Π½Π΅ ΡΠΌΠΎΡΡΡ.
- Π£ ΠΌΠ΅Π½Ρ ΠΌΠΎΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΠΈ ΠΌΠ½Π΅ Π²ΡΡ ΡΠ°Π²Π½ΠΎ.
ΠΠ΄Π΅ΡΡ Π²ΠΈΠ΄Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 3 Π·Π½Π°ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΈΡΠ½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠΏΡΡΡΠ°Π»ΠΈΡΡ ΠΈ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°?
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://www.chemtable.com/ru/autorun-organizer.htm
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Ρ Π½Π΅Π΅ ΡΠ°ΠΊΠΈΠ΅:
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°: Microsoft Windows 10 / 8 / 7 / Vista / XP (32- ΠΈ 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅)
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ: ΠΎΡ 256 ΠΠ±
- ΠΠΈΡΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ: 50 ΠΠ±
- ΠΡΠ°Π²Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
ΠΠ° ΡΠ°ΠΉΠ»Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΏΡΠ°Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ.
Π ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°.
ΠΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΡΠ°ΠΉΡ VirusTotal Π΄Π»Ρ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠ°Π»Π΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΊΠ°Π·Π° Π½ΠΎΠ²ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π²ΠΊΠ»ΡΡΠ΅Π½Π°, ΡΠΎ ΡΠ°ΠΌ Autorun Organizer Π±ΡΠ΄Π΅Ρ Π²ΠΈΡΠ΅ΡΡ Ρ ΠΠ°Ρ Π² ΡΡΠ΅Π΅ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ. ΠΡΠΎ Π»ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ Π·Π°Π±ΡΠ²ΡΠΈΠ²ΡΡ
Π»ΡΠ΄Π΅ΠΉ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Autorun Organizer ΡΠ°Π· Π² ΠΌΠ΅ΡΡΡ ΠΈΠ»ΠΈ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ. ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΏΠ΄Π΅ΠΉΡΠ΅ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²ΠΈΡΠΈΡ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ. Π‘ΠΏΡΠ°Π²Π° Π·Π΅Π»Π΅Π½ΡΠ΅ ΠΏΠΎΠ»ΠΎΡΠΊΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΡΠΊΠ»ΡΡΠΈΠ²ΡΠΈΡ
ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΌΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ βΠ£Π΄Π°Π»ΠΈΡΡ ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡβ ΡΠ»Π΅Π²Π° Π΅ΡΡΡ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ βΠΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡβ. ΠΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π»ΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄ :-).
VirusTotal ΡΡΠ°Π·Ρ ΠΏΠΈΡΠ΅Ρ Π²Π°ΠΌ ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΡ ΠΡ Π²ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ, ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΎΠ½Π° ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎ ΡΠΏΡΠ°Π²Π° Π²Π½ΠΈΠ·Ρ Π΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΠ° βΠ¦Π΅Π½ΡΡ ΠΎΡΠΌΠ΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉβ ΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΡΠΊΠ°Ρ.
ΠΠΎΡ Ρ Π½Π°ΡΠ΅Π» ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π°ΠΏΠ΄Π΅ΠΉΡΠ΅Ρ (ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»ΡΡΠΈΠΊ π ) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Lightshot, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅Ρ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ ΠΈ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΡΠΎΠΆΠ΅. ΠΠ΅ΡΠ΅ΠΌ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΌΡΡΠΎΡ ΠΈΠ· Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΠ°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π―Π½Π΄Π΅ΠΊΡ-Π°ΠΏΠ΄Π΅ΠΉΡΠ΅ΡΠΎΠΌ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ.
Β
ΠΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π½Π° ΡΠ²ΠΎΠΉ Π²ΠΊΡΡ ΠΈ ΡΠ²Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΡΠ΅.
Β
ΠΠ»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΡ Π² ΡΠ΅Π±Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΌΠ΅Π½Ρ βΠΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρβ ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ. ΠΠΎ Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ!!! ΠΠ΅ ΡΠΎΠ²Π΅ΡΡΡ Π»Π΅Π·ΡΡ Π² Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°.
ΠΡΠ»ΠΈ Π½Π°ΠΏΠΎΡΡΠ°ΡΠΈΠ»ΠΈ, ΡΠΎ Π·Π°Ρ ΠΎΠ΄ΠΈΠΌ Π² βΠ¦Π΅Π½ΡΡ ΠΎΡΠΌΠ΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉβ.
Β
ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΡΠΈΡΡ ΠΠ°Ρ.
Π Π΅ΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΌΠΈ ΠΊΠ°ΠΊ ΠΠ°ΠΌ ΡΠ΄ΠΎΠ±Π½Π΅ΠΉ.
ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Windows ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π΄Π²ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π±Π»ΠΎΠΊΠ°Ρ ΠΈΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΈ Π½ΠΎΡΡΠ±ΡΠΊΠ΅. Π ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ° Radeon ΠΈ Π·Π²ΡΠΊ ΠΎΡ Creative, Π° Π² Π½ΠΎΡΡΠ±ΡΠΊΠ΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ Intel ΠΈ Nvidia ΠΏΠ»ΡΡ Π·Π²ΡΠΊ Realtek.
ΠΠ° ΡΡΠ°ΡΠΈΠΎΠ½Π°ΡΠ΅ ΡΡΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΎ, Π° Π½Π° Π½ΠΎΡΡΠ±ΡΠΊΠ΅ ΡΠ½ΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ. ΠΠΎΡ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Windows ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΠ°Π·Π½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅.
Π’Π΅ΠΏΠ΅ΡΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ Π΅ΡΠ΅ ΠΊ Π΄Π²ΡΠΌ Π·Π½Π°ΡΠΊΠ°ΠΌ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡ Π² ΡΡΠ΅Π΅.
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΏΡΠ°Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ ΠΈ Π·Π°Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ NVIDIA.
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ» ΠΈ ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π³Π°Π»ΠΎΡΠΊΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π·Π½Π°ΡΠΎΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠΎΠΉ Intel. ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΏΡΠ°Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ Π½Π° Π·Π½Π°ΡΠΊΠ΅ Π² ΡΡΠ΅Π΅.
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈβ¦
ΠΠ°Π»ΡΡΠ΅ ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ°Ρ .
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
ΠΡΠ΅ ΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈ Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡΠΈ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π² ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΈΡΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΡΠ΅ΠΉ ΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ.
ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π° Π½Π°ΡΡ Π³ΡΡΠΏΠΏΡ Π² VK Β Π§ΠΠ-Π¦ΠΠΠ’Π — Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΠΎΠ½Π΅ΡΠΊΠ΅
ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΠΏΠΎΡΡΠ°
— require(vendor/autoload.php): Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΡΠΊΡΡΡΡ ΠΏΠΎΡΠΎΠΊ
Π§Π΅Π³ΠΎ Π²Π°ΠΌ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ composer install
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π²Π°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π² PHPMailer Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² examples/
, Π½ΠΈΠΆΠ΅ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΡΡΡΠ΄Π° Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ../vendor/autoload.php
.
Autoload.php, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π½Π°ΡΠ»ΠΈ Π² C:\Windows\SysWOW64\vendor\autoload.php
, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡΠ°, Π³Π΄Π΅ Π²Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ phpcs, phpunit, phpmd ΠΈ Ρ. Π΄.
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡΠ°
— ΡΡΠΎ , Π° Π½Π΅ , ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, , Π° Π½Π΅ , ΡΡΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ Ρ Π²Π°ΡΠΈΠΌΠΈ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, Π·Π°ΠΏΡΡΠΊ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ
ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠ±ΠΎΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅
, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈ Π²Ρ ΡΠΎΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΡΡΠΎΡΠ½ΠΈΡΡ β Π²Π°ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ composer update
ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π° Π½Π΅ Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅.
Π― ΡΠ°ΡΡΠΎ ΡΠ»ΡΡΡ ΠΆΠ°Π»ΠΎΠ±Ρ Π½Π° ΡΠΎ, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ composer, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΎΠ±ΡΠΈΠΉ ΠΈ Ρ Π½ΠΈΡ Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡ: Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ (ΡΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ) ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π²Π°ΡΠΈΠΌΠΈ PHP-ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠΈ.
ΠΠ°ΠΏΡΡΠΊ composer update
ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ composer install
, ΠΈ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅Ρ ΠΏΠ°ΠΏΠΊΠΈ vendor
(Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ²Π΅ΠΆΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°), ΡΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΡΠ°ΠΉΠ» composer.lock
, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² Π²Π΅ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π² Π½Π΅ΠΌ, ΠΈ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠ°ΡΠ½ΠΎ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅Ρ ΡΠ°ΠΉΠ»Π° composer.lock
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π±ΡΠ» Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅), ΡΠΎ composer install
ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ composer
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ , Π° Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡ.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ, Π½Π°Π·Π²Π°Π² Π΅Π³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
composer update ramsey/uuid
ΠΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡ Π²Π΅ΡΡΠΈΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π² Π²Π°ΡΠ΅ΠΌ composer.json
, ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π΅Π΅ Π² Π²Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ Π²Π°Ρ composer.lock
ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ. ΠΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡΠ°
, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°.
ΠΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ , Π° Π½Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» composer.lock
; ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Ρ
ΠΎΡΡ-ΡΡΠ΅Π΄, ΡΠ΅ΠΌ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ Laravel 5, 6, 7 ΠΈ 8, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ Π΅Π΅, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Laravel 8 ΠΏΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ.
Composer 2.0 ΡΡΡΡΠ°Π½ΠΈΠ» Π²ΡΠ΅ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ; Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ composer 1.x, Π²Π°ΠΌ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ.
ΠΠΎΠ½ΡΡΠ°Π½ΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ β Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΠΎ Ruby on Rails
1 ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ°, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ Π°ΠΊΡΠΈΠ²Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Rails.
Π ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Ruby Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΡ ApplicationController 9.0004 ΠΈ
ΠΡΠΏΡΠ°Π²ΡΡΠ΅
, ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π΄Π»Ρ Π½ΠΈΡ
:
# ΠΠ ΠΠΠΠΠΠ’Π ΠΠ’ΠΠΠ. ΡΡΠ΅Π±ΡΠ΅ΡΡΡ "application_controller" ΡΡΠ΅Π±ΡΠ΅ΡΡΡ "ΠΏΠΎΡΡ" # ΠΠ ΠΠΠΠΠΠ’Π ΠΠ’ΠΠΠ. ΠΊΠ»Π°ΡΡ PostsController < ApplicationController ΠΈΠ½Π΄Π΅ΠΊΡ Π·Π°ΡΠΈΡΡ @posts = ΠΏΠΎΡΡ.Π²ΡΠ΅ ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
ΠΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Rails, Π³Π΄Π΅ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²Π΅Π·Π΄Π΅:
class PostsController < ApplicationController ΠΈΠ½Π΄Π΅ΠΊΡ Π·Π°ΡΠΈΡΡ @posts = ΠΏΠΎΡΡ.Π²ΡΠ΅ ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Idiomatic Rails Π²ΡΠ΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ , ΡΡΠ΅Π±ΡΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΠΈΠ· ΠΈΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° lib
, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ruby, Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΡΡ
ΠΊΠ°ΠΌΠ½Π΅ΠΉ Ruby ΠΈ Ρ. Π΄. Π’ΠΎ Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΈΡ
ΠΏΡΡΡΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΎΠ±ΡΡΡΠ½Π΅Π½Π½ΡΠΌ Π½ΠΈΠΆΠ΅.
Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Rails ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ°ΡΠΎΠΉ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² Zeitwerk ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ.
2 Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Rails ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ, Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ» app/helpers/users_helper.rb
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ UsersHelper
, Π° ΡΠ°ΠΉΠ» app/controllers/admin/payments_controller.rb
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Admin::PaymentsController
.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Rails Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Zeitwerk Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ String#camelize
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ app/controllers/users_controller.rb
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ UsersController
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
"users_controller".camelize # => UsersController
Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ΅ΡΠ΅Π³ΠΈΠ±ΠΎΠ² Π½ΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Zeitwerk.
3 config.autoload_paths
ΠΡ ΡΡΡΠ»Π°Π΅ΠΌΡΡ Π½Π° ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠΎΡΠΎΡΡΡ
Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ/ΠΌΠΎΠ΄Π΅Π»ΠΈ
. Π’Π°ΠΊΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½: Object
.
ΠΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Zeitwerk, Π½ΠΎ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° Β«ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈΒ».
Π ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π·Π΄Π΅ΡΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· Π²ΡΠ΅Ρ
ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ --- Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ²
, javascript
ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ
--- ΠΏΠ»ΡΡ ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ UsersHelper
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² app/helpers/users_helper.rb
, ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΌ, Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ (ΠΈ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ) Π²ΡΠ·ΠΎΠ² require
Π΄Π»Ρ Π½Π΅Π³ΠΎ:
$ bin/ ΡΠ΅Π»ΡΡΠΎΠ²ΡΠΉ Π±Π΅Π³ΡΠ½ 'p UsersHelper' UsersHelper
Rails Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π² app
Π² ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ/ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΎΡΠΎΠ²
, Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΎΡΠΎΠ²; ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ.
ΠΠ°ΡΡΠΈΠ² ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ ΠΏΡΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° config.autoload_paths
, Π² config/application.rb
ΠΈΠ»ΠΈ config/environments/*.rb
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΌΠΎΠ΄ΡΠ»Ρ MyApplication ΠΊΠ»Π°ΡΡ Application < Rails::Application config.autoload_paths << "#{root}/extras" ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
Π’Π°ΠΊΠΆΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ΅Π»ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄Π²ΠΈΠΆΠΊΠ° ΠΈ Π² ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ config/environments/*.
. rb
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΠΌΡΡΠΈΡΡΠΉΡΠ΅ ActiveSupport::Dependencies.autoload_paths
; ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ β config.autoload_paths
.
ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠΎΠ΄ Π² ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΡΠΌΠΎ Π² config/initializers/*.rb
. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½ΠΈΠΆΠ΅, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ Rails.autoloaders.main
.
4 config.autoload_once_paths
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ
ΠΎΡΠ΅ΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π±Π΅Π· ΠΈΡ
ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ autoload_once_paths
Ρ
ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ΅Π½.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΏΡΡΡΠ°, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π΅Π΅, Π½Π°ΠΆΠ°Π² config.autoload_once_paths
. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² config/application.
ΠΈΠ»ΠΈ rb
config/environments/*.rb
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΌΠΎΠ΄ΡΠ»Ρ MyApplication ΠΊΠ»Π°ΡΡ Application < Rails::Application config.autoload_once_paths << "#{root}/app/serializers" ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
Π’Π°ΠΊΠΆΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ΅Π»ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄Π²ΠΈΠΆΠΊΠ° ΠΈ Π² ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ config/environments/*.rb
.
ΠΡΠ»ΠΈ app/serializers
ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Ρ Π² config.autoload_once_paths
, Rails Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠΈΡΠ°Π΅Ρ ΡΡΠΎΡ ΠΏΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ Π² app
. ΠΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π°Π΄ ΡΡΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΠΌ.
ΠΡΠΎ ΠΊΠ»ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΡΡΠΈΡΡΡΡΡΡ Π² ΠΌΠ΅ΡΡΠ°Ρ , Π²ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ°ΠΌΠΎΠΉ ΡΡΠ΅Π΄Π΅ Rails.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Active Job Ρ ΡΠ°Π½ΡΡΡΡ Π²Π½ΡΡΡΠΈ Active Job:
# config/initializers/custom_serializers.rb Rails.application.config.active_job.custom_serializers << MoneySerializer
ΠΈ ΡΠ°ΠΌ Active Job Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π² ΠΏΡΡΡΡ
Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ.
Π‘Π΄Π΅Π»Π°ΡΡ MoneySerializer
ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΌ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°, Ρ
ΡΠ°Π½ΡΡΠΈΠΉΡΡ Π² Active Job. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ MoneySerializer
Π±ΡΠ» ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΌ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Rails 7 ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΏΠΎΠ΄Π½ΡΠ» Π±Ρ ΠΡΠΈΠ±ΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ
.
ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β ΠΊΠΎΠ³Π΄Π° Π΄Π²ΠΈΠΆΠΊΠΈ ΡΠΊΡΠ°ΡΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°:
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ "decorate ActionController::Base" do ActiveSupport.on_load(:action_controller_base) Π΄Π΅Π»Π°ΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ MyDecoration ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ, Ρ
ΡΠ°Π½ΡΡΠΈΠΉΡΡ Π² MyDecoration
ΠΊ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠ΅Π΄ΠΊΠΎΠΌ ActionController::Base
, ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° MyDecoration
Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½Π°, ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΏΡΠ΅Π΄ΠΊΠΎΠ².
ΠΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ· ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² config/initializers
. ΠΡΠ°ΠΊ, Ρ ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
# config/initializers/custom_serializers.rb Rails.application.config.active_job.custom_serializers << MoneySerializer
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·
, Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ :bootstrap_hook
.
ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Rails.autoloaders.once
.
5 $LOAD_PATH
ΠΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΊ $LOAD_PATH
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π²Π½ΡΡΡΠΈ Zeitwerk ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ΄Π°Π²Π°ΡΡ Π²ΡΠ·ΠΎΠ²Ρ require
Π΄Π»Ρ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠ»Π°Π³ΠΎΠΌ:
config.add_autoload_paths_to_load_path = false
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ Π·Π°ΠΊΠΎΠ½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ΅Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Π½ΡΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Bootsnap, ΡΡΠΎ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΎΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅Π½ΡΠΆΠ½ΡΡ
ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΌΠ΅Π½ΡΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.
6 ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ°
Rails Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ.
Π’ΠΎΡΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ, Rails Π²ΡΠ³ΡΡΠΆΠ°Π΅Ρ Π²ΡΠ΅ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ
, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ»Π°ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, Π±ΡΠ΄ΡΡ ΡΠ½ΠΎΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠ΄Ρ
Π²Π°ΡΡΠ²Π°Ρ ΠΈΡ
ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π°. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, β config.cache_classes
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
(ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° Π²ΠΊΠ»ΡΡΠ΅Π½Π°) ΠΈ true ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π°
(ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π°).
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Rails ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΡΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΉΠ»Π°Ρ
. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΡΠ΅ΠΌ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ
config.file_watcher 9ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° 0004.
Π ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Rails Π½Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π·Π° ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ config.cache_classes
. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ΄Π° Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ΅Π°Π½ΡΠ° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΡΡΠ°Π½ΠΈΡΠ΅. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π½Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π»ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ reload!
:
irb(main):001:0> User.object_id => 701362773 irb(main):002:0> ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ! ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ°... => ΠΏΡΠ°Π²Π΄Π° irb(main):003:0> User.object_id => 70136284426020
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°, Ρ
ΡΠ°Π½ΡΡΠΈΠΉΡΡ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ User
, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
6.1 ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ
ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π² Ruby Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΡΡΠ°Π·ΠΈΡΡ ΡΡΠΎ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ Β«ΡΠ°Π·Π³ΡΡΠ·ΠΊΠ°Β» 9ΠΠ»Π°ΡΡ 0003 User ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
User
ΡΠ΅ΡΠ΅Π· Object.send(:remove_const, "User")
.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΠΎΡ ΡΠ΅Π°Π½Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Rails:
irb> joe = User.new ΠΈΡΠ±> ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ! irb> ΠΠ»ΠΈΡΠ° = User.new irb> joe.class == alice.class => Π»ΠΎΠΆΡ
joe
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° User
. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° User
ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ. alice
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ User
, Π° joe
β Π½Π΅Ρ β Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡ ΡΡΡΠ°ΡΠ΅Π». ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ½ΠΎΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ joe
, Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠ±ΡΠ΅Π°Π½Ρ IRB ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π° reload!
.
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ, β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΠΌΠ΅ΡΡΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ:
# lib/vip_user.rb ΠΊΠ»Π°ΡΡ VipUser < ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ½Π΅Ρ
Π΅ΡΠ»ΠΈ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ, Ρ. ΠΊ.
VipUser
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠΎΠΌ VipUser
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠΎΠ³: Π½Π΅ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ .
7 ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΠΈΠ· ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ Once
. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π» config.autoload_once_paths
Π²ΡΡΠ΅.
ΠΠ΄Π½Π°ΠΊΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ Ρ ΠΏΡΡΠ΅ΠΉ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ
Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ. ΠΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΊΠΎΠ΄Ρ Π² config/initializers
, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π΄Π²ΠΈΠΆΠΊΠΎΠ².
ΠΠΎΡΠ΅ΠΌΡ? ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ, ΠΎΠ½ΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΡΡΡΡΡΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡ ΡΠ΅ΡΠ²Π΅Ρ, ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π·Π°ΠΏΡΡΡΡΡΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
7.1 ΠΠ°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ 1: Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄
7.1.1 ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ApiGateway
β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠ· app/services
, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ
, ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
# config/initializers/api_gateway_setup.rb ApiGateway.endpoint = "https://example.com" # ΠΠ ΠΠΠΠΠΠ’Π ΠΠ’ΠΠΠ
ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ ApiGateway
Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ nil
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
ΠΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π²Π΅ΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, Π½ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΈΡ
Π² Π±Π»ΠΎΠΊ to_prepare
, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ:
# config/initializers/api_gateway_setup.rb Rails.application.config.to_prepare ΡΠ΄Π΅Π»Π°ΡΡ ApiGateway.endpoint = "https://example.com" # ΠΠ ΠΠΠΠΠ¬ΠΠ ΠΊΠΎΠ½Π΅Ρ
ΠΠΎ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΡΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΌ.
7.1.2 ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅
ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² Π±Π»ΠΎΠΊΠ°Ρ
after_initialize
. ΠΠ½ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅, Π½ΠΎ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠ½ΠΎΠ²Π° ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ.
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ:
# config/initializers/check_admin_presence.rb Rails.application.config.after_initialize ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΠ»ΠΈ Π ΠΎΠ»Ρ.Π³Π΄Π΅(ΠΈΠΌΡ: "admin").ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ? Abort "Π ΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ." ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
7.2 ΠΠ°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ 2: Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΅Π³ΠΎ Π² ΠΌΠ΅ΡΡΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΠ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ:
config.middleware.use MyApp::Middleware::Foo
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΡΠ΅ΠΊ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠΎΡ
ΡΠ°Π½Π΅Π½ Π² MyApp::Middleware::Foo
Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΌ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ.
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Active Job:
# config/initializers/custom_serializers.rb Rails.application.config.active_job.custom_serializers << MoneySerializer
ΠΡΠ΅, ΡΡΠΎ MoneySerializer
ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΌ, ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΠ»ΡΡ Π±Ρ Π² Active Job, Π½Π΅ ΠΎΡΡΠ°ΠΆΠ°Ρ Π²Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅Π»ΡΡΡ ΠΈΠ»ΠΈ Π΄Π²ΠΈΠΆΠΊΠΈ, ΡΠΊΡΠ°ΡΠ°ΡΡΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° ΠΏΡΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, turbo-rails
ΡΠΊΡΠ°ΡΠ°Π΅Ρ ActiveRecord::Base
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ "turbo.broadcastable" do ActiveSupport.on_load(:active_record) ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ Turbo::Broadcastable ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΏΡΠ΅Π΄ΠΊΠΎΠ² ActiveRecord::Base
. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²
Turbo::Broadcastable
Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΏΡΠ΅Π΄ΠΊΠΎΠ² ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ.
Π‘Π»Π΅Π΄ΡΡΠ²ΠΈΠ΅: ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°ΡΡ .
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΡ
Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΡΡΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, lib
β ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ±ΠΎΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΡΡΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ, Π½ΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ $LOAD_PATH
. ΠΡΠΎΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ , Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ
.
ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ Π²ΡΡΠ΅, Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡ Π² ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΎ config.autoload_once_paths.
8 ΠΠ΅ΡΠ΅ΡΠΏΠ΅Π»ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°
Π ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
ΠΎΠ±ΡΡΠ½ΠΎ Π»ΡΡΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠ΅ΡΠΏΠ΅Π»ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π²ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ, Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄ΠΎΠ±Π½Π° Π΄Π»Ρ CoW.
ΠΠ΅ΡΠ΅ΡΠΏΠ΅Π»ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΠ»Π°Π³ΠΎΠΌ config.eager_load
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ production
.
ΠΠΎΡΡΠ΄ΠΎΠΊ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½.
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π±ΡΡΡΡΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Rails Π²ΡΠ·ΡΠ²Π°Π΅Ρ Zeitwerk::Loader.eager_load_all
. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΡΡ
ΠΊΠ°ΠΌΠ½Π΅ΠΉ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Zeitwerk, ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Ρ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ΠΌ.
9 ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ»ΠΎΡ ΠΎ ΡΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ. ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅Π³ΠΎ API ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ STI Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π»Π΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π° Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½Π° ΡΡΡΠ»ΠΊΠ°. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΡ ΡΠΎ, Π½Π° ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ»Π°Π»ΠΈΡΡ.
Π ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠΌΡΡΠ»Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ STI Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅ΠΆΠΈΠΌΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅, ΡΡΠΎ ΡΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ. ΠΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΡΠΈΠΏΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Ρ
ΠΎΡΠΎΡΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ°Ρ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ β Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ STI Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
lib
:
module StiPreload Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Rails.application.config.eager_load ΡΠ°ΡΡΠΈΡΠΈΡΡ ActiveSupport::Concern Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π΄Π΅Π»Π°ΡΡ cattr_accessor: ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½, instance_accessor: false ΠΊΠΎΠ½Π΅Ρ class_methods Π΄Π΅Π»Π°ΡΡ Π΄Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΈ preload_sti, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΡΠΏΠ΅Ρ ΠΊΠΎΠ½Π΅Ρ # ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΠΏΡ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π° # Π΄ΠΈΡΠΊ, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ STI API # ΠΎΠ±Π΅ΡΠΏΠΎΠΊΠΎΠ΅Π½Π½ΡΠΉ. # # ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ store_full_sti_class ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π·Π°ΡΠΈΡΠ° preload_sti ΡΠΈΠΏΡ_Π²_Π΄Π± = \ Π±Π°Π·ΠΎΠ²ΡΠΉ_ΠΊΠ»Π°ΡΡ. Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ. Π²ΡΠ±Π΅ΡΠΈΡΠ΅ (inheritance_column). ΠΎΡΡΠ΅ΡΠ»ΠΈΠ²ΡΠΉ. ΡΡΡΠ²Π°ΡΡ (inheritance_column). ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ types_in_db.each Π΄Π΅Π»Π°ΡΡ |ΡΠΈΠΏ| logger.debug("ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠΈΠΏΠ° STI #{ΡΠΈΠΏ}") type.constantize ΠΊΠΎΠ½Π΅Ρ self.preloaded = ΠΏΡΠ°Π²Π΄Π° ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π΅Ρ
, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΊΠΎΡΠ½Π΅Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ STI Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
# app/models/shape.rb ΡΡΠ΅Π±ΡΠ΅ΡΡΡ "sti_preload" ΡΠΎΡΠΌΠ° ΠΊΠ»Π°ΡΡΠ° < ApplicationRecord include StiPreload # Π’ΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. ΠΊΠΎΠ½Π΅Ρ
# ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΌΠΎΠ΄Π΅Π»ΠΈ/polygon.rb ΠΊΠ»Π°ΡΡ ΠΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ < Π€ΠΎΡΠΌΠ° ΠΊΠΎΠ½Π΅Ρ
# ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΌΠΎΠ΄Π΅Π»ΠΈ/ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ.ΡΠ± ΠΊΠ»Π°ΡΡ Π’ΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ < ΠΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΊΠΎΠ½Π΅Ρ
10 ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ΅ΡΠ΅Π³ΠΈΠ±ΠΎΠ²
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Rails ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ String#camelize
, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, posts_controller.rb
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ PostsController
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ "posts_controller".camelize
.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ html_parser.
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ rb
HtmlParser
. Π§ΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅, ΡΡΠΎΠ±Ρ ΠΊΠ»Π°ΡΡ Π±ΡΠ» HTMLParser
? ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΠΎ.
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΡ:
ActiveSupport::Inflector.inflections(:en) ΡΠ΄Π΅Π»Π°ΡΡ |inflect| inflect.Π°ΠΊΡΠΎΠ½ΠΈΠΌ "HTML" inflect.Π°ΠΊΡΠΎΠ½ΠΈΠΌ "SSL" ΠΊΠΎΠ½Π΅Ρ
ΠΡΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Active Support. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ ΠΎΡΠΎΡΠΎ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΊΠ°ΠΌΠ΅Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΈΠΌΠ΅Π½ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Active Support, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π½Π°Π±ΠΎΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈΠ½ΡΠ»Π΅ΠΊΡΠΎΡΠ°ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
Rails.autoloaders.each do |autoloader| Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ.inflector.inflect( "html_parser" => "HTMLParser", "ssl_error" => "SSLError" ) ΠΊΠΎΠ½Π΅Ρ
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ String#camelize
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΈΠ½ΡΠ»Π΅ΠΊΡΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°. ΠΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Active Support ΠΈ ΠΈΠΌΠ΅ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΠΈΠ½ΡΠ»Π΅ΠΊΡΠΎΡΡ ΠΊΠ°ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Zeitwerk::Inflector
:
Rails.autoloaders.each do |autoloader| autoloader.inflector = Zeitwerk::Inflector.new Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ.inflector.inflect( "html_parser" => "HTMLParser", "ssl_error" => "SSLError" ) ΠΊΠΎΠ½Π΅Ρ
ΠΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ; ΠΎΠ½ΠΈ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΡ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ»Π΅ΠΊΡΠΎΡ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Zeitwerk.
10.1 ΠΡΠ΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π³ΠΈΠ±Ρ?
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΏΠΎΡΠ»Π΅
, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² config/initializers
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, config/initializers/inflections.rb
Π΄Π»Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Active Support ΠΈΠ»ΠΈ config/initializers/zeitwerk.rb
Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ Once
, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ· ΡΠ΅Π»Π° ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² config/application.rb
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ Once
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ»Π΅ΠΊΡΠΎΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
11 ΠΠ²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ
ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ ΠΈΡ
ΠΊΠΎΠ΄ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² zeitwerk
ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠΎΠ΄ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ zeitwerk
ΡΠ΅ΠΆΠΈΠΌ. ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ classic
, ΠΊΠΎΠ΄ ΡΠ΄ΡΠ° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ classic
.
ΠΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Rails ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π΄Π²ΠΈΠΆΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΊ ΠΏΡΡΡΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° ΡΠ°Π·Π½ΠΈΡΡ Π½Π΅Ρ. ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΡΠΈ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ Π»ΠΈ ΠΎΠ½ΠΈ Π΄Π΅ΡΠ΅Π²Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΌΡ-Π»ΠΈΠ±ΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Π²ΠΈΠΆΠΊΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Devise:
% bin/rails runner 'pp ActiveSupport::Dependencies.autoload_paths' [".../ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ", ".../ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ/ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ", ".../ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ", ".../ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΌΠΎΠ΄Π΅Π»ΠΈ", ".../ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΌΠΎΠ΄Π΅Π»ΠΈ/ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ", ".../Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ/ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ-4.8.0/ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ", ".../Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ/ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ-4.8.0/ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ", ".../gems/devise-4.8.0/app/mailers"]
ΠΡΠ»ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π΄Π²ΠΈΠΆΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Rails 6 ΠΈΠ»ΠΈ Rails 6.1 ΠΈ Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π³ΠΎΡΠΎΠ² ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ
ΠΈΠ»ΠΈ zeitwerk
. Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ:
ΠΡΠ»ΠΈ
ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ
ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π°require_dependency
, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π΅Π΅. ΠΠΎΠΊΠ°zeitwerk
Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ, Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ, Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅zeitwerk
.ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ
ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π°-ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ("User" -> "user.rb"), Π° ΡΠ΅ΠΆΠΈΠΌzeitwerk
Π΄Π΅Π»Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΌΠ΅Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ("user.rb" -> "User"). ΠΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π½ΠΎ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΡΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π³Π»Π°Π²Π½ΡΡ Π±ΡΠΊΠ², ΠΊΠ°ΠΊ Π² Β«HTMLParserΒ». Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π±ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ β ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΠ°ΠΊΠΈΡ ΠΈΠΌΠ΅Π½. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Β«HtmlParserΒ».
Π ΡΠ΅ΠΆΠΈΠΌΠ΅
classic
ΡΠ°ΠΉΠ»app/model/concerns/foo.rb
ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ°ΠΊFoo
, ΡΠ°ΠΊ ΠΈConcerns::Foo
. Π ΡΠ΅ΠΆΠΈΠΌΠ΅zeitwerk
Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡFoo
. ΠΠ»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Foo
.
12 Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
12.1 Π ΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°Π΄Π°ΡΠ° zeitwerk:check
ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΌ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ
, ΠΈ ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ ΡΡΡΠ½ΡΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΠ΅ Ρ classic
to zeitwerk
mode, ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎ-ΡΠΎ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅:
% bin/rails zeitwerk:check ΠΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅, Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ!
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ "ΠΡΠ΅ Ρ
ΠΎΡΠΎΡΠΎ!" ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΈΡΠ΅ΡΠ΅.
12.2 ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ ΡΠ΅ΡΡΠΎΠ² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Zeitwerk ΠΈ Π΄ΡΡΠ³ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π»ΠΈΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² Π²Π΅ΡΡΠΈΠΈ 9.0031 Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Rails .
13 Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ
ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΈ, β ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ β Π²ΠΊΠ»ΡΡΠΈΡΡ:
Rails.autoloaders.log!
Π² config/application.rb
ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ Π²Π΅ΡΡΠΈ ΠΆΡΡΠ½Π°Π» Π² ΡΠ°ΠΉΠ», Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΡΡΠΎ:
Rails.autoloaders.logger = Logger.new("#{Rails.root}/log/autoloading.log")
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΎΡ Rails Π΅ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ config/application.rb
. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡ Rails, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ΅:
# config/initializers/log_autoloaders.rb Rails.autoloaders.logger = Rails.logger
14 Rails.autoloaders
ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Zeitwerk, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ:
Rails.autoloaders.main Rails.autoloaders.once
ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ:
Rails.autoloaders.zeitwerk_enabled?
ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Rails 7 ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true
.
ΠΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ
ΠΠ°ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΏΠΎΠΌΠΎΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π²Π½Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄, Π΅ΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π½Π°Ρ ΡΠ°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ main. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅
Edge Guides ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅
Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΆΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅.
ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎ Ruby on Rails.