рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рд╕рд┐рдирд╛рддреНрд░рд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдЬрдм Sinatra::Helpers.send_file рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ Sinatra::Helpers.send_file рдиреЗ рд╕рднреА RAM (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 14Gb) рдХреЛ рдЦрд╛ рд▓рд┐рдпрд╛ред

рдЕрдзреНрдпрдпрди рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд┐рдирд╛рддреНрд░рд╛ рдЦреБрдж рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ 512 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрддрд▓реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ (рд╕рд╛рде рд╣реА WEBrick) рдЕрдкрдиреЗ рд╕реНрддрд░ рдкрд░ рд░реИрдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдмрдлрд╝рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдРрд╕реЗ рджреБрдГрдЦрдж рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд░реЗрдирдмреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ (рдпреВрдирд┐рдХреЙрд░реНрди рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░, рд▓реЗрдХрд┐рди рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ / рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдмрд┐рдирд╛ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рд▓реЗрдХрд┐рди рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреЗрдЬрддреЗ рд╕рдордп, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдХреЛрд░ рдкрд░ рд▓рдЧрднрдЧ 30% рд╕реАрдкреАрдпреВ рдЦрд╛рддреА рд╣реИред

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

рд╡рд░реНрддрдорд╛рди рд╕рд┐рдирд╛рддреНрд░рд╛ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ, Send_file рд╡рд┐рдзрд┐ рдХреЛ Rack :: File API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд┐рдирд╛рддреНрд░рд╛ рдордгрд┐ рдХреЗ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреЗрд╡рд▓ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 if Sinatra::VERSION < '1.3.0' && Rack.release >= '1.3' # Monkey patch old Sinatra to use Rack::File to serve files. Sinatra::Helpers.class_eval do # Got from Sinatra 1.3.0 sources def send_file(path, opts={}) if opts[:type] or not response['Content-Type'] content_type opts[:type] || File.extname(path), :default => 'application/octet-stream' end if opts[:disposition] == 'attachment' || opts[:filename] attachment opts[:filename] || path elsif opts[:disposition] == 'inline' response['Content-Disposition'] = 'inline' end last_modified opts[:last_modified] if opts[:last_modified] file = Rack::File.new nil file.path = path result = file.serving env result[1].each { |k,v| headers[k] ||= v } halt result[0], result[2] rescue Errno::ENOENT not_found end end end 


рд░реЗрдирдмреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
 # try to use sendfile when available begin require 'sendfile' rescue LoadError end Rainbows! do use :ThreadSpawn end 


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

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

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


All Articles