рдиреНрдпреВрдирддрдо рдкреНрд░рдгрд╛рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП django рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдлреНрд▓реИрдЯрдкреЗрдЬ рдХрд╛ рдЕрдиреБрдХреВрд▓рдиред рдЪреБрдЯрдХреБрд▓рд╛ рд▓реЗрдЦ



рдХрдЯ рдХреЗ рддрд╣рдд рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрддреНрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ - рдЖрдк рд╕рднреА рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред


рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


рддреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ

рдПрдХ рдмрд╛рд░, рдЕрдкрдиреЗ рдкреНрд░рд┐рдп рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рддрдм рдореИрдВ рдХреЗрд╡рд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдирд┐рдпреБрдХреНрдд рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдореИрдВрдиреЗ рдЙрд╕реЗ рд▓реЗрдЖрдЙрдЯ рджрд┐рдпрд╛, рдЙрд╕рдиреЗ рд╣рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреБрдж рдмрддрд╛рдпрд╛ред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рд╣рдореЗрдВ 130-150 рд░реВрдмрд▓ рдХреА рд▓рд╛рдЧрдд рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рдирд╛ - рдмреЗрд╢рдХ, рдпрд╣ рдПрд▓рдПрдПрдордкреА рдерд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдкреИрдирдХреЗрдХ рдиреЗ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕рдордп рдмреАрддрддрд╛ рдЧрдпрд╛ рдФрд░ рд╣рдо рджреВрд╕рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛ рдЧрдПред рдЕрдм рдореИрдВ рдЦреБрдж рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдКрдкрд░ рдлреЗрдВрдХ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣реАред рдЗрд╕ рдмрд╛рд░ рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ: рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рдЭреБрдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕рд╛рдЗрдЯ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред

рдЖрджрдд рд╕реЗ рдмрд╛рд╣рд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛: рд╡реАрдкреАрдПрд╕ рдХреЗ рд▓рд┐рдП рдЯреИрд░рд┐рдл рдкреГрд╖реНрда рдЦреЛрд▓реЗрдВ, рдиреАрдЪреЗ рд╕реЗ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ - рдареАрдХ рд╣реИ, рд▓рдЧрднрдЧ 800-1000 рд░реВрдмрд▓ред тАЬрддреЛ? рд╣рдо 200 рд░реВрдмрд▓ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рддреЗ рдереЗ ... тАЭ- рдЬреАрд╡рдирд╕рд╛рдереА рд╣реИрд░рд╛рди рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдзрд┐рдХ рдХреНрдпреЛрдВ? рдЙрддреНрддрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╡рд╛рдпреБ рд╕реЗрдирд╛, рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдирд╣реАрдВ рдмрддрд╛рдПрдВрдЧреЗ, рддреЛ рджрдЬрдВрдЧрд╛ рд╡рд╣рд╛рдБ, рдпрд╣рд╛рдБ рдФрд░ рд╡рд╣рд╛рдБ рд╣реИ, "рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЬреБрдорд▓рд╛ рдирд╣реАрдВ рд╣реИ!" - рд▓реЗрдХрд┐рди рдЬреБрдорд▓рд╛ рдХрд╛ рдХреНрдпрд╛? рдЬреБрдорд▓рд╛, рдЬреАрддрд╛: 100 рд░реВрдмрд▓ред рдПрдХ рдорд╣реАрдирд╛ рдЦреБрд╢реА рд╕реЗ рдЬрд┐рдпреЛред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рдЙрддреНрддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред

рдХрд╛рд░реНрдп


рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ: рдиреНрдпреВрдирддрдо cps рдФрд░ django рдкрд░ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ - рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕, рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдиреНрдпреВрдирддрдо: 200 рдПрдордмреА рд░реИрдо, 500 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдкреНрд░рддрд┐рд╢рдд, рд╕реНрдХреНрд░реВ рдкрд░ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рджреЛ рдЧрд┐рдЧреНрд╕ рд╣реЛрдиреЗ рджреЗрдВред

рдбреАрдмреА

рдХрд╛рд░реНрдп рдореЗрдВ рдЕрдбрд╝рдЪрди: рд░рд╛рдоред рд╕рд╛рдЗрдХреНрд▓рд╛рдЗрдЯ рд▓реЗрдВред рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдХреНрдпрд╛! рд╕рдЪ рдореЗрдВ, рд╡рд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреИрд╢ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдХрдорд┐рдпреЛрдВ рдХреА рднрд░рдкрд╛рдИ рдХрд░рддреЗ рд╣реИрдВред

Kesh

рд╣рдо рд╕рднреА рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓реЗрддреЗ рд╣реИрдВ: рдирдЧреНрдиреЗрдХреНрд╕ + рдореЗрдореНрдХреЗрдб рдФрд░ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬреБрдВрдЧрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╡реЗрдм рд╕рд░реНрд╡рд░

рдпрд╣ uwsgi рд╣реЛрдЧрд╛ - рддреЗрдЬ рдФрд░ рдлреИрд╢рдиреЗрдмрд▓ред рдЧреЛрд▓рд╛рдХрд╛рд░ рд╡реИрдХреНрдпреВрдо рдХреЗ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдзрд┐рд╡реЗрд╢рди

рдХрд╣реАрдВ рд╕рддреНрд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рд░реЗрдбрд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдирд╣реАрдВред рдореЗрдордХреЗрдб рднреА рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ: рдХреИрд╢ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдЕрдХреНрд╕рд░ рдкреВрд░реЗ рдХреИрд╢ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╕рддреНрд░ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ ред рдЬрдВрдЧ рдореЗрдВ рдирдпрд╛ 1.4 рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХреБрдХреА-рдЖрдзрд╛рд░рд┐рдд рд╕рддреНрд░ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИ: рд╕рднреА рд╕рддреНрд░ рдбреЗрдЯрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреБрдХреАрдЬрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЧреЛрджреА рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред

рд╕рд╛рдордЧреНрд░реА

рдпрд╣рд╛рдБ рд╣рдо рд╕рд┐рд░реНрдл рдорд╛рд░реНрдХрдбрд╛рдЙрди рд▓реЗрддреЗ рд╣реИрдВред "рдХреНрдпреЛрдВ рдорд╛рд░реНрдХрд╛рдбрд╛рдЙрди?" рд╡рд╣ рдорд╕реНрдд рд╣реИред рд╡рд╣ рдХрдорд╛рд▓ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд▓реЗрдЦ рдореИрдВ рдЗрд╕ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛, рдЗрд╕рдореЗрдВ рдЯреИрдЧ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдПрдордбреА рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдХрднреА-рдХрднреА рдЖрдзрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдлреЗрдХрдбрд┐рдЯрд░ рдЕрд▓рд╛рдЗрдХ рдПрдбрд┐рдЯрд░ рд╕реЗ рдХрдЪрд░рд╛ рдФрд░ 100 рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЖрдВрдЦ рдХреЛ рдЕрдзрд┐рдХ рднрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рда рдХреЛ рд╕рд╛рдЗрдЯ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╕рдВрдкрд╛рджрдХ: рдХреБрдЫ рд╢реИрд▓рд┐рдпреЛрдВ рд╕рдм рдХреБрдЫ рд╢рд╛рд╕рди рдХрд░рддреА рд╣реИрдВ - рдЬреИрд╕реЗ рдХрд┐ рд╕реИрд░реВрдиред

рдореБрд▓рд╛рдпрдо

рд╕рдмрд╕реЗ рдирдпрд╛ рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Ubuntu рд╕рд░реНрд╡рд░ рдХреЛ рдХрдо рд╕реЗ рдХрдо рд▓реЗрдВ: nginx, memcached, python 2.7ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрд▓рд┐рдЯрдЬрд╝, рдкрд┐рд▓реНрд▓рд╛ рд▓рд╛рдЗрдирдХреНрд╕, рд╕реНрд▓реИрдХреНрд╕ рдЬреИрд╕реЗ рдХреБрдЫ рдЖрд╕рд╛рди рд▓реЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ ubuntu рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо 128 рдПрдордмреА рд░реИрдо рд╣реИ, рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ "рдмреЗрд╕ рд╕рд┐рд╕реНрдЯрдо" + рдХреБрдЫ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореБрдЭреЗ рд╕реНрдХреНрд░реВ рдкрд░ рдПрдХ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдорд┐рд▓рд╛ред рд╕рд░реНрд╡рд░ рд╡рд┐рддрд░рдг, рд╢реНрд░реАрдорд╛рди ред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд▓реЗрдЦ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдорд╛рдк рдХреЛ рдЬрд╛рдиреЗрдВрдЧреЗред

рдбрд┐рдЬрд╝рд╛рдЗрди


Django

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЕрдкрдирд╛ dzhangi config рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
#     . #   ,       js. SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' SESSION_COOKIE_HTTPONLY = True # https://docs.djangoproject.com/en/1.4/ref/settings/#std:setting-USE_I18N #    .    : This provides an easy way to turn it off, for performance.       ,     ,      USE_I18N = False # https://docs.djangoproject.com/en/1.4/ref/settings/#use-l10n #       .    pytils    . USE_L10N = False # https://docs.djangoproject.com/en/1.4/ref/settings/#use-tz #      USE_TZ = False #  ,     .      . TEMPLATE_CONTEXT_PROCESSORS = ( # default template context processors "django.contrib.auth.context_processors.auth", # "django.core.context_processors.debug", # "django.core.context_processors.i18n", # "django.core.context_processors.media", "django.core.context_processors.static", #"django.core.context_processors.tz", "django.contrib.messages.context_processors.messages", # required by django-admin-tools 'django.core.context_processors.request', 'orangetrans.utils.context_processors.common', ) # Sentry     ,     . # include_html     ,       . #        . # https://docs.djangoproject.com/en/1.4/topics/logging/#django.utils.log.AdminEmailHandler LOGGING = { тАж 'handlers': { 'mail_admins': { 'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True, } }, тАж } #       ""  SEND_BROKEN_LINK_EMAILS = True 

Kesh

рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдмрд╕реЗ рдордЬрдмреВрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдзреАрдореА рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рдордиреЗ рдХреИрд╢ рд╣рдорд╛рд░реА рдврд╛рд▓ рд╣реЛрдЧреАред рдХрдИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдХреИрд╕реЗ рдЪрд▓реЗрдЧрд╛? рдпрд╣ рд╕рд░рд▓ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкреГрд╖реНрда рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдирд╛рдЬрд╝рд┐рдВрдХреНрд╕ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдХреИрд╢ рдореЗрдВ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ dzhang рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд╛рдЬрд╝рд┐рдВрдХреНрд╕ рдХреЛ рджреЗрддрд╛ рд╣реИ, рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдлреНрд░рдВрдЯреЗрдВрдб рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рджреЗрдЧрд╛ред рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдмрд╛рд░ рдЬрд╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдмрд╛рдж рдХреЗ рд╕рднреА рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдореЗрдореНрдХреИрд╢ + рд╡рд╛рдЗрдЬрд╝рд┐рдВрдХреНрд╕ рдХреА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рд╛рди? рдЦреИрд░, рд▓рдЧрднрдЧ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреИрд╢ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИ, рдПрдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рднрд░реЗ рдЧрдП рдлреЙрд░реНрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдмрд╛рд░ рдЗрд╕ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╢ рд╕реЗ рдПрдХ рд╣реА рдлреЙрд░реНрдо рдорд┐рд▓реЗрдЧрд╛: рднрд░реЗ рд╣реБрдП рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдлреИрд╢рди рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :)

Django

рдлреЙрд░реНрдо рд╣рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╛рд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЬреЛ рд╣рдо рдкрд╣рд▓реЗ рд╣реА js рдкрд░ рдЬрд╛рдПрдВрдЧреЗред рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк (рдЖрдк рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ? :) рд╣рдордиреЗ рдХреИрд╢ рдирд╣реАрдВ рдЬреАрддрд╛ред рдПрдХ рдХреНрд╖рдг рдЕрднреА рднреА рд╣реИ, рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рд╣рдо рдкреЛрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЬрдВрдЧрд▓ рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг (1.2?) POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╕реАрдПрд╕рдЖрд░рдПрдл рд╣рдорд▓реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛ рдЧрдИ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЙрд▓рдмреИрдХ рдЕрдиреБрд░реЛрдз рд╣реИ: рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдирд╣реАрдВред рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ csrf_exempt рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмрдВрдбрд▓ рдХреЗ рдХрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╣реИред рдпрд╣ dzhanga рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд░реЙрд▓реНрд╕ рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛, рдореИрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ред рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ред рддреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ:
 import re from django.core.cache import cache from django.conf import settings class NginxMemCacheMiddleWare: def process_response(self, request, response): url = request.get_full_path() cache_it = not settings.DEBUG \ and request.method == 'GET' \ and response.status_code == 200 if cache_it: stoplist = [ x for x in settings.CACHE_IGNORE_REGEXPS if re.match(x, url) ] if not stoplist: cache.set(url, response.content) return response 

рд╣рдо рдХреЗрд╡рд▓ GET рдХреИрд╢ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдФрд░ 404 рдкрд░ рдХреИрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХреНрдпреЛрдВ? рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдпрд╛ рд╣рдорд▓рд╛рд╡рд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдмреЙрдЯ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдмрд╛рдбрд╝ рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд▓рд┐рдП рд╡рд╛рдкрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдЖрддреЗ рд╣реИрдВ:
 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', 'KEY_PREFIX': 'YOURSITE', } } 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдмреИрдХрдПрдВрдб рдореЗрдордХреЗрдб, рд╕реЙрдХреЗрдЯ рдФрд░ рдЙрдкрд╕рд░реНрдЧред рд╡реИрд╕реЗ, рдореИрдВ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ pylibmc рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рд╡рд╣ рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реИрд╕реЗ рднреАред рдореИрдВрдиреЗ рдЕрдЬрдЧрд░ рдХреЛ рдХрдВрдард╕реНрде рдХрд░ рд▓рд┐рдпрд╛ред
 CACHE_IGNORE_REGEXPS = ( re.compile(r'/admin.*'), re.compile(r'/some_url.*'), ) 

рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд╖рд┐рджреНрдз URL рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ MIDDLEWARE_CLASSES рдореЗрдВ рд╣рдорд╛рд░реЗ рдирдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред

рд╡реИрд╕реЗ, рдЖрдк рдПрдордХреИрд╢ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП django-memcache-status рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдореЗрдордХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдорд╛рдирд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ :) рдпрд╣ рдлреНрд▓реИрдЯрдкреЗрдЬ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдмрд╛рдК рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рдкрддрд▓рд╛ рдХрд░ рджреЗрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╣ django-admin-tools рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рдирд╣реАрдВ рд╣реИред

nginx

рд╕рд░реНрд╡рд░ рджреЗрд╡ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕, рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ:
 upstream dev { server 127.0.0.1:8000; } server { listen 80; server_name dev.local; charset utf-8; location ~^/(media|static) { root /home/user/project; access_log off; break; } location / { if ($request_method = POST) { proxy_pass http://dev; break; } default_type "text/html; charset=utf-8"; set $memcached_key "YOURSITE:1:$request_uri"; memcached_pass unix:/tmp/memcached.sock; error_page 404 502 = @fallback; } location @fallback { proxy_pass http://dev; } } 

рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рджреЗрдЦреЗрдВ: '$ memcached_key рд╕реЗрдЯ рдХрд░реЗрдВ "рдЖрдкрдХрд╛: 1: $ request_uri"?' рдпрд╣реАрдВ рдкрд░ рд╕рд╛рд░рд╛ рдЬрд╛рджреВ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдХреИрд╢ рдореЗрдВ рдХреИрд╢ + рдкреВрд░реНрдг URL рдХреЗ рдореБрдЦреНрдп рдЙрдкрд╕рд░реНрдЧ + рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреГрд╖реНрда рдХреЛ рдПрдХ рдмрд╛рд░ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, dzhanga рдЗрд╕реЗ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛, рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ nzhinks рдХреЛ рдЗрд╕ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк dzhanga рд╕рд╛рдЗрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рддреБрд░рдВрдд рдореЗрдХреИрд╢ рдХреЛ рдЦреАрдВрдЪреЗ рдмрд┐рдирд╛ рдмреИрдХрдПрдВрдб рдкрд░ рд╡рд╛рдкрд╕ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВред рдПрдХ рдЕрдиреНрдп рдмрд┐рдВрджреБ: рдореИрдВ рдлреБрд▓рдмреИрдХ рдореЛрдб рдХреЗ рд▓рд┐рдП рдЧреЗрдЯ-рдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ js рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ (рдореЗрд░реЗ рдкрд╛рд╕ noscript: P) рд╣реИ: рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреИрдм рд╣реИрдВ, рдЗрд╕реАрд▓рд┐рдП uri рдХреЗ рдмрдЬрд╛рдп request_uri рдЧреЗрдЯ-рдХреАрдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдЕрдВрддрд┐рдо рдпреВрдЖрд░рдПрд▓ рд╣реИред

1.3 рдЬреЗрдВрдЧрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдкреВрд░реА рдХреБрдВрдЬреА рд╕реНрд╡рдпрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реЗрдЯ (), рдкрд╛рдиреЗ (), рд╣рдЯрд╛рдиреЗ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рднрд╛рдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдмрд╛рдХреА рдЬрдВрдЧ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣рд┐рд╕реНрд╕рд╛ рдкреВрд░реНрдг рдкреГрд╖реНрда url рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЧрдЬрд╝рд┐рдк рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдирд╛рдЬрд╝рд┐рдВрдХреНрд╕ рдореЗрдореНрдХреИрд╢ рд╕реЗ рдХреНрдпрд╛ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдкреИрдЪ 4 рд╕рд╛рд▓ рдкрд╣рд▓реЗ Ninx рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 0.6 рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рдерд╛, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╛рд░реНрдб рдореЗрдВ 1. *ред рдпрджрд┐ рдЖрдк IE6 рдХреА рд╕реЗрд╡рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрдВрдЧ рдореЗрдВ рд╣реА рд╕рдВрдкреАрдбрд╝рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕рд╛рдордЧреНрд░реА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдмрд╛рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рдЧрдЬрд╝рд┐рдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

Memecached

рдЪрд▓реЛ рд╕реЙрдХреЗрдЯ, /etc/memcached.conf рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдорд░рдг рдХрд░реЗрдВ:
 #-s unix socket path to listen on (disables network support) -s /tmp/memcached.sock #-a access mask for unix socket, in octal (default 0700) -a 0777 

рд╕реНрдерд┐рддрд┐-рд╡рд┐рдЬреНрдЮрд╛рди

рдореИрдВ IE рдХреЗ рд▓рд┐рдП jquery рдФрд░ html5shim рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред Google рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░реЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рднрд╛рдЧреНрдп рдХреЛ рд╕реБрдЧрдо рдмрдирд╛рдПрдЧрд╛:

 <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

рд╣рдо django-рдХрдВрдкреНрд░реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдХреА рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВрдЧреЗ ред рдореИрдВ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - django- рдХрдВрдкреНрд░реЗрд╕рд░ рдЗрд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рднреА рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдиреЛрдб.рдЬреЗрдПрд╕ рдбрд╛рд▓рдирд╛ рди рднреВрд▓реЗрдВред рд╕рднреА рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдХрдВрдкреНрд░реЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдЧреЛрдВрдж рдХрд░реЗрдВ: рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде, рд╕реАрдПрд╕рдПрд╕ рд╕реА рд╕реАрдПрд╕рдПрд╕ред рд╕реМрдВрджрд░реНрдпред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирдиреНрдп рдирд╛рдо рднреА рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рд╕реНрд░реЛрдд рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдирдП рдирд╛рдореЛрдВ рд╡рд╛рд▓реЗ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдП рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдкреВрдЫреЗрдЧрд╛ "рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЕрдЬреАрдм рдХреНрдпреЛрдВ рджрд┐рдЦрддрд╛ рд╣реИ?"ред рд╡реИрд╕реЗ, Dzhanga 1.4 рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдг


рдареАрдХ рд╣реИ, рд╣рдо рд▓рдЧрднрдЧ рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИрдВред
рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд▓реЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ: рдкрд╛рдЗрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣рдореЗрд╢рд╛ рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ uwsgi рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдВрджреБ рд╣реИ: рд╡рд░реНрдЪреБрдЕрд▓ рдмреЙрдХреНрд╕ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣рд░реНрдЯреНрдЬ рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдП, рд╣рдо рдЦреБрдж рдХреЛ рдПрдХ рдХреЛрд░ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд▓реЗрдВрдЧреЗред

Uwsgi рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдкрд░, рдореИрдВ рдбреЙрдХ рдФрд░ рд╡реЗрд▓рд┐рдирдХреНрд╕ рдкрд░ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред рдпрд╣рд╛рдБ рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ: рдЧреЛрджреА рд╕реЗ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ, рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред рдПрдХрдорд╛рддреНрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдЬреЛ рдореИрдВ рд╕реБрдЭрд╛ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╡рд░реНрдЪреБрдЕрдирд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкрд╛рдЗрдердирде рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╣реИрдВ - рдУрд╣, рдореИрдВрдиреЗ рдХрд┐рддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ рдорд╛рд░ рдбрд╛рд▓рд╛, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбреЙрдХ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рд╣реИред Google рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирдирд╛: рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЛрдЧ рд╡рд┐рдХреГрдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рд░рд╛рд╕реНрддреЗ рдЬреЛрдбрд╝реЗрдВ, рдЖрджрд┐ред рдФрд░ рдмрд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ rtfmред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд┐рдЬреА рдореЛрдб рдЦреЛрд▓реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛ, рд╣рдо рдпрд╣ рдорд╛рдкреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдкреЗрдЬ рдХрд┐рддрдирд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
 18 requests тЭШ 284.93KB transferred тЭШ 1.11s (onload: 1.12s, DOMContentLoaded: 979ms) 

рдХреИрд╢ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдХреИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рдПрдХ рдирдпрд╛ рдирд┐рдЬреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ:
 18 requests тЭШ 298.09KB transferred тЭШ 291ms (onload: 293ms, DOMContentLoaded: 150ms) 

рдЖрдЗрдП POST рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рдлрд┐рд░ рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ)ред рдпрд╣ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП get_or_create рдЪрд▓рддрд╛ рд╣реИ:
 21 ms.  . 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╡реГрджреНрдзрд┐ рд╣реИ, рд╕рд╛рде рд╣реА рдмрд┐рдирд╛ рдЧрдЬрд╝рд┐рдк рдХреЗ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╡рдЬрди рд╣реИред
рдХреВрд▓? рдХреВрд▓ред

рдХреВрд▓рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ


рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ:

рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрдврд╝реЗрдЧрд╛ - рд╣рдо 5 рдПрдордмреА рд▓реЗрддреЗ рд╣реИрдВред рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ:
 #    /etc/fstab: tmpfs /mnt/project/ tmpfs size=5M,mode=0777 0 0 #   $ sudo mkdir /mnt/project/ #     ,     : $ sudo mount /mnt/project/ # mode=0777    ,    $ mkdir /mnt/project/static $ mkdir /mnt/project/db 

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рднреА рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрдЯреЗрдЯрд┐рдХ рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕, рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдФрд░ рдбреЙрдХреНрд╕ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдЬрдВрдШрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдвреВрдВрдврдиреЗ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреАред рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:
 #          . #    ,    : STATIC_ROOT = COMPRESS_ROOT = '/mnt/project/static/' #     (--noinput    ,  -      ): $ ./manage.py collectstatic --noinput -c #    .     : DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/mnt/project/db/db', } } #   $ cp -r project/db /mnt/project/db/db #   $ killall -HUP uwsgi 

рд╣рдо рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдХреБрдЯ рдкрд░ рд╢реБрд░реБрдЖрдд рдФрд░ рдмреИрдХрдЕрдк рдореЗрдВ рдЗрд╕ рд╕рдм рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

Njinks рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
 upstream project { server unix:/tmp/project.sock; } server { listen 80; server_name project.ru www.project.ru; if ($host = www.project.ru){ rewrite ^(.*)$ http://project.ru$1 permanent; } location /static { root /mnt/project/; access_log off; expires max; } location /media { root /project/; access_log off; expires 5d; } location / { include /etc/nginx/uwsgi_params; if ($request_method = POST) { uwsgi_pass project; } default_type "text/html; charset=utf-8"; set $memcached_key "project:1:$request_uri"; memcached_pass unix:/tmp/memcached.sock; error_page 404 502 = @fallback; } location @fallback { include /etc/nginx/uwsgi_params; uwsgi_pass project; } } 

рдореАрдбрд┐рдпрд╛, рд╣рдо рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╣реАрдВ рдереЗ рдЬрд╣рд╛рдВ рдпрд╣ рдерд╛ред рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдЪрд▓реЗ рдЧрдП, рдмрд╛рдХреА рд╣рдо рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВред
рдпрд╣ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди 'рдПрдХреНрд╕рдкрд╛рдпрд░ рдореИрдХреНрд╕' рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрд╣ рд╢рд╛рдВрдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХрд▓ рд╣рдо рддрд╕реНрд╡реАрд░ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдВ, рдореА? рдпрджрд┐ рдЖрдк django-рдХрдВрдкреНрд░реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ css рдореЗрдВ рдпрд╣ рджреЗрдЦрдХрд░ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛: /static/i/button-small.png?e59177bafc62ред

рдХреИрд╢ рдХреЗ рдмрд┐рдирд╛:
 14 requests тЭШ 284.93KB transferred тЭШ 743ms (onload: 775ms, DOMContentLoaded: 708ms) 

рдХреИрд╢ рдХреЗ рд╕рд╛рде:
 14 requests тЭШ 298.09KB transferred тЭШ 174ms (onload: 175ms, DOMContentLoaded: 140ms) 

рдкреЛрд╕реНрдЯ:
 17ms 

рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБред рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдмреИрдХрдЕрдк


рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрддрдирд╛ рдмреЗрдХрд╛рд░ рд╣реВрдВ рдХрд┐ рдореИрдВ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡реЗрдмрдбрд╛рд╡ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ ред рдЖрдкрдХреЛ MyDrive рдкрд░ рд╕рд░рд▓ рдФрд░ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓реЗрдВрдЧреЗ ред рд▓рд╛рдн рдЕрдм рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рднрд░рд╛ рд╣реИ - рдЪреБрдиреЗрдВред рдпрд╣ рд╣рдореЗрдВ рд╕реНрдХреНрд░реВ рдкрд░ рд╕реНрдерд╛рди рдмрдЪрд╛рдиреЗ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рддреЛ рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ?



рддреЛ рдордЬрд╛рдХ рдХреНрдпрд╛ рд╣реИ?


рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдареАрдХ рдЙрд╕реА рддрд░рд╣, рдЬреИрд╕реЗ рдХрд┐ рдмрд╛рд╣рд░ рдХреА рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдФрд░ рдЖрджрдд рд╕реЗ рддрдВрдЧ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ, рд╕рдорд╛рдзрд╛рди рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╕реНрдкреЛрд░реНрдЯреА рд╣реИрдВ: рдЪрдпрдирд┐рдд рдХреИрд╢ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рдФрд░ sqlite рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдмреИрдХ рдСрдлрд┐рд╕)ред рдФрд░ рдореЗрд░реЗ рд╕рд╣реА рджрд┐рдорд╛рдЧ рдореЗрдВ рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рдмрдЪрд╛рдКрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдм рдПрдХ рдкреНрд░рд╢рдВрд╕рдХ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред

рд▓рдЧрддрд╛ рддреЛ рд╕рдм рд╣реИред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In142241/


All Articles