Ubuntu 12.04 LTS рдореЗрдВ рд░реЗрд▓реНрд╕ рдкрд░ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдореЗрдордХрд╛рдЯреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдореЗрдордХреЗрдЪреНрдб рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬреЛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред Memcached рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЧрддрд┐ рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдФрд░ рдореЗрдордХреЗрдЪ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ:

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

рджрд▓реНрд▓реА рдордгрд┐ рдХреА рд╕реНрдерд╛рдкрдирд╛


рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рдорд╛рдЗрдХ рдкреЗрд░рд╣рдо рджрд▓реНрд▓реА рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ:
gem install dalli 

рдпрджрд┐ рдЖрдк рдмреБрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдордгрд┐ ' рджрд▓реНрд▓реА ' рд▓рд╛рдЗрди рдХреЛ рдЬреЗрдордлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрдВрдбрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдкреВрд░рд╛ рдХрд░реЗрдВред
рдЕрдЧрд▓рд╛, рд╣рдо рд░реЗрд▓ рдФрд░ рдореЗрдореНрдХреЗрдб рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реЗрдВрдЧреЗред

рд░реЗрд▓ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░реЗрд▓ рдФрд░ рдореЗрдордХреЗрдЪреНрдб рдХреЗ рдмреАрдЪ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рд╡рд╛рддрд╛рд╡рд░рдг / рдкреНрд░реЛрдбрдХреНрд╢рди.рдЖрд░рдмреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд░реЗрд▓ рдХреЛ рдХреИрд▓реА рдХреЗ рд▓рд┐рдП рджрд▓реНрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ:
 config.cache_store = :dalli_store 

рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдФрд░ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ ActionController рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:
 config.action_controller.perform_caching = true 

рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд░реЗрд▓ рдЖрд╡реЗрджрди рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдПрдХ рд░реЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╕реНрдерд╛рдкрдирд╛


рд╣рдореЗрдВ Memcached рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рджреЛ рдореБрдЦреНрдп рддрд░реАрдХреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдХреИрд╢ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ (рдХреИрд╢-рдХрдВрдЯреНрд░реЛрд▓) рдЬреЛрдбрд╝рдирд╛

рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рд╣реЗрдбрд░ (рдХреИрд╢-рдХрдВрдЯреНрд░реЛрд▓) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдореЗрдХреИрдб рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдХ :: рдХреИрд╢ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдирд┐рдпрдВрддреНрд░рдХреЛрдВ / slow_controller.rb рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:
 def slow_action sleep 15 # todo - print something here end 

рдЖрдк рд░реИрдХ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ :: рдХреИрд╢ рдХреЛ рдкрд╛рдБрдЪ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
 def slow_action expires_in 5.minutes sleep 15 # todo - print something here end 

рдЕрдм, рдЬрдм рдЖрдк рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╛рдо рдХреА рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред Rack :: Cache рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рд╣рд░ рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХреНрд╢рди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧреАред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╢-рдХрдВрдЯреНрд░реЛрд▓ рд╣реЗрдбрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ expires_in рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ 5. рдорд┐рдирдЯ ,: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ => рдЕрд╕рддреНрдп ред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдХреИрд╢рд┐рдВрдЧ рд╕рдордп рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╖реНрдЯрддрдо рд╕рдордп рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

HTTP рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рд▓реЗрдЦрдХ рдФрд░ рд╡реЗрдмрдорд╛рд╕реНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХ рдиреЙрдЯрд┐рдВрдШрдо рдХреА рдХреИрд╢рд┐рдВрдЧ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВ ред

рдореЗрдордХрд╛рдЯреЗрдб рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг

рдпрджрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдЙрди рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдХреНрд╕рд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореЗрдордХреЗрдб рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
 def slow_action slow_object = create_slow_object end 

рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореЗрдореЗрдХреЗрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 def slow_action slow_object = Rails.cache.fetch(:slow_object) do create_slow_object end end 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░реЗрд▓ рдореЗрдореЗрдХреИрдб рд╕реЗ рдкреНрд░рдореБрдЦ 'slow_object' рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧреАред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ (рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рддреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо 'slow_object' рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЦреБрд╢рдмреВ рдХреИрд╢рд┐рдВрдЧ

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдХреИрд╢рд┐рдВрдЧ рд░реЗрд▓ рдХреА рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдмрд╕реЗ рдЧрддрд┐рд╢реАрд▓ (рдЕрдХреНрд╕рд░ рдмрджрд▓рддреЗ) рднрд╛рдЧреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреИрд╢ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯ рдХрд░ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 <% # app/views/managers/index.html.erb %> <% cache manager do %> Manager s Direct Reports: <%= render manager.employees %> <% end %> <% # app/views/employees/_employee.html.erb %> <% cache employee do %> Employee Name: <%= employee.name %> <%= render employee.incomplete_tasks %> <% end %> <% # app/views/tasks/_incomplete_tasks.html.erb %> <% cache task do %> Task: <%= task.title %> Due Date: <%= task.due_date %> <% end %> 

рдЗрд╕ рдХреИрд╢рд┐рдВрдЧ рддрдХрдиреАрдХ рдХреЛ рд░реВрд╕реА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдЧреБрдбрд╝рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрд▓ рдореЗрдореЗрдХреИрдб рдореЗрдВ рдЗрди рд╕рднреА рдЕрдВрд╢реЛрдВ рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдореЙрдбрд▓ рдирд╛рдо рдХреЛ рдХреИрд╢ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреИрд╢ рдореЗрдВ рдЗрди рдореЙрдбрд▓реЛрдВ рдХреА рдХреБрдВрдЬреА рдХреЗрд╡рд▓ рддрднреА рдмрджрд▓ рдЬрд╛рдПрдЧреА рдЬрдм рдореЙрдбрд▓ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧреА рдпрджрд┐ рд╣рдореЗрдВ "рдХрд╛рд░реНрдп" рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 @task.completed! @task.save! 

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╢ рд╣реИ рдФрд░ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдЦрдВрдб рдХреИрд╢ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, ActiveRecord рд╕реНрдкрд░реНрд╢ рдХреБрдВрдЬреА рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдЧреА:
 class Employee < ActiveRecord::Base belongs_to :manager, touch: true end class Task < ActiveRecord::Base belongs_to :employee, touch: true end 

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

рд░реВрд╕реА Matryoshka рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рдПрдХ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреИрд╢рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, рд░реЗрд▓реНрд╕ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдХреЛ рдХрдм рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ "рдХрд╛рд░реНрдп" рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИ:
 <% # app/views/tasks/_incomplete_tasks.html.erb %> <% cache task do %> Task: <%= task.title %> Due Date: <%= task.due_date %> <p><%= task.notes %></p> <% end %> 

рдЖрдВрд╢рд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд░реЗрд▓ рдЦрдВрдб рдХреИрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рдкрд╣рд▓реЗ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреИрд╢ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ cache_digests рд░рддреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХреИрд╢ рдХреБрдВрдЬреА рдореЗрдВ MD5 рд╣реИрд╢ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЖрдВрд╢рд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреИрд╢ рдХреБрдВрдЬреА рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд░реЗрд▓ рдХреЛ рдирдИ рдкреАрдврд╝реА рдХреЗ рд╡реНрдпреВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╣ рдпрд╣ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдпрджрд┐, рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдВрд╢рд┐рдХ _incomplete_tasks.html.erb рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рддреЛ рд╕рднреА рдирд┐рд░реНрднрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджреЗрдВрдЧреЗред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд░реЗрд▓ 4.0 рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рддреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
 gem install cache_digests 

рдпрджрд┐ рдЖрдк рдПрдХ рдмрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдХреЛ рдордгрд┐рдлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 gem 'cache_digests' 


рдЙрдиреНрдирдд рд░реЗрд▓ рдФрд░ рдореЗрдордХрд╛рдЯреЗрдб рдЕрдиреБрдХреВрд▓рди


рджрд▓реНрд▓реА рдордгрд┐ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рдореЗрдореНрдХреЗрдб рд╕рд░реНрд╡рд░ рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рднрд╛рд░ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдореЗрдореНрдХреЗрдб рдХреА рдХреНрд╖рдорддрд╛ рдмрдврд╝реЗред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рд╕рд░реНрд╡рд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдореЗрдореНрдХреЗрдб рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рд╡рд╛рддрд╛рд╡рд░рдг / production.rb рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╕реЗрдЯрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ:
 config.cache_store = :dalli_store, 'web1.example.com', 'web2.example.com', 'web3.example.com' 

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

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


All Articles