рд░реЗрд▓ 4 рдЗрдВрдЬрдиред рдорд╛рдЙрдВрдЯреЗрдмрд▓ рдЗрдВрдЬрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдордгрд┐ рд╡рд┐рдХрд╛рд╕ - рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдкрдврд╝реЗрдВ


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

рдордгрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдмреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рдереЗ ( рд╕рдордп рджреЛ рддреАрди )

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

рд╕рдорд╕реНрдпрд╛


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдпрд╣ рдХреИрд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ - рдореИрдВрдиреЗ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЖрдк рдЯреЛрдкреА рддреИрдирд╛рдд рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣рд╛рдВ
тАЬрдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред
рдпрджрд┐ рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕реНрд╡рд╛рдореА рд╣реИрдВ рддреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред тАЭ

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

рд╡рд┐рдЪрд╛рд░


рдПрдХ рдордгрд┐ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЯреЗрд▓ рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд┐рдП рдЧрдП рдкрде рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд▓реЙрдЧ / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА .log рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ

рддреБрд░рдВрдд рджрд┐рдЦрд╛рдУ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ:


рдЖрдкрдХреЛ рдХреЗрд╡рд▓ Gemfile рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реИ
gem 'tail' 

рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
 bundle install 

рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ ( config/routes.rb ) рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдмрд┐рдВрджреБ рдкрд░ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ
 mount Tail::Engine, at: "/tail" 

рдЗрд╕рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░
рдпрд╣ рдкреГрд╖реНрда рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди Devise рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХреИрд╕реЗ рдХрд░реЗрдВ?


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

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

  class LogsController < ApplicationController before_filter :authenticate_user! if defined? Devise def index @web_logger ||= Log.instance @web_logger.n = params[:n] log_file_name = params[:file_name] || "#{Rails.env}.log" @files = @web_logger.tail(log_file_name) end end 

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

 @files.include?(file_name) ? `tail -n #{@n} log/#{file_name}`.lines : [] 

рд░реВрдмреА рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдУрдПрд╕ рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдмрд╕ рдЗрд╕реЗ рдЗрди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ (рдирд░рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╡рд░реНрдг: `tail -n 40 production.log` - рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрдВрддрд┐рдо 40 рд▓рд╛рдЗрдиреЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдкрд░рд┐рд╖реНрдХреГрдд рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рдврд╛рдВрдЪрд╛ - рд╡реЗрдирд┐рд▓рд╛.рдЬреЗрдПрд╕ ) рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рддрдХ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рддреА рд╣реИ:

 'window.scrollTo(0, document.body.scrollHeight);' 


рд╣рдо рдЖрд╡реЗрджрди рд╕реЗ рдордгрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред


рд╣реИрдмреЗ рдФрд░ рд╕рдореНрдорд╛рдирд┐рдд рд░реЗрдпрд╛рди рдмреЗрдЯреНрд╕ рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдмрдВрдбрд▓ рдЬреЗрдо рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдордгрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд╡реАрдирддрдо рд╡реАрдбрд┐рдпреЛ рдирд╡рдВрдмрд░ 2011 рддрдХ рдХрд╛ рд╣реИред
рдЕрдм рдЗрдВрдЬрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реЗрд▓ рд░рддреНрди рдмрдирд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред

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

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

рд░рддреНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рд░реЗрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рд╣рд╛рдпрдХ рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдирд╛) - рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ

рддреЛ, рдкреВрдВрдЫ рдирд╛рдордХ рднрд╡рд┐рд╖реНрдп рдХрд╛ рд░рддреНрди рдмрдирд╛рдПрдВ

 rails plugin new tail --mountable 

--mountable рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдЙрдВрдЯреЗрдмрд▓ рдЗрдВрдЬрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛
рд░реЗрд▓ рдкреНрд▓рдЧрдЗрди рдирдИ рдкреВрдВрдЫ - рдЙрд▓реНрд▓реЗрдЦрдиреАрдп -рд╕реНрдХрд╛рдЗрдк-рд╕рдХреНрд░рд┐рдп-рд░рд┐рдХреЙрд░реНрдб
рдЪреВрдВрдХрд┐ рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

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

рддреАрди рдореБрдЦреНрдп рдмрд┐рдВрджреБ:


рдкрд╣рд▓реЗ

engine.rb рдлрд╝реЛрд▓реНрдбрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдордгрд┐ рдХрд╛ рдЖрдзрд╛рд░ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ engine.rb рд╣реИред engine.rb
 module Tail class Engine < ::Rails::Engine isolate_namespace Tail end end 

рдордгрд┐ рдирд╛рдордХ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдкреГрдердХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, рджреГрд╢реНрдп рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рд▓рдкреЗрдЯреА рдЬрд╛рдПрдВрдЧреАред рдпрд╛рдиреА SomeClass рдХреНрд▓рд╛рд╕ рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдкрд╛рд╕ Tail::SomeClass , рдЬреЛ рдорд╛рд░реНрдЧреЛрдВ рдФрд░ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, messages_path рдЖрдк tail.messages_path рдпрджрд┐ рдЖрдкрдХреЛ рдордгрд┐ рд╡реЗрдм рднрд╛рдЧ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдмреЗрд╢рдХ, рдпрд╣ рдордгрд┐ рдХреЗ рдирд╛рдо рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЯрдХрд░рд╛рд╡ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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


рджреВрд╕рд░рд╛,

.gemspec рдлрд╝рд╛рдЗрд▓ - pesonal рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рд░рддреНрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИред

lib / version.rb - gem'a рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк semver.org рдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЬреЗрдо'рдП рдХреЗ рдЕрдЧрд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдФрд░ рддреАрд╕рд░рд╛:

рдкрд░реАрдХреНрд╖рдг / рдбрдореА рдлрд╝реЛрд▓реНрдбрд░ - рдЗрд╕рдореЗрдВ рдПрдХ рдлрд░реНрдЬреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (/test/dummy/config/routes.rb)ред рдпрд╛рдиреА, рдордгрд┐ рдХреЗ рдХрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рд░реЗрд▓ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдореЗрд░рд╛ рдЖрд╡реЗрджрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000 / рдкреВрдВрдЫ рдкрд░ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реИред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда


рдордгрд┐ рднрд░реЗрдВ


 rails generate resource log 

рдореИрдВ рдордЪрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдЖрд░рдпреВрдбреА рдФрд░ рдкреАрдврд╝реА рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдореМрдЬреВрджрд╛ рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЛрдб рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ test/dummy рд╕реЗ рдирдХрд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдХрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ, рдЕрдм рд╕реЗ, рдордгрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 gem 'tail', path: '~/projects/tail' 

рдпрд╛
 gem 'tail' , git: 'git://github.com/k2m30/tail.git' #   push  github 

рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдордгрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ bundle update tail ред

рдкреНрд░рдХрд╛рд╢рди


рдорд╛рдгрд┐рдХ рдкрд░ рд░рддреНрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд░рддреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
рдордгрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
 rake build 

рд╣реЗрд▓реНрдкрд░ рдЯреАрдо
 gem push 

рдпрд╣ рдордгрд┐ рдмрдирд╛рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рд░реВрдмреАрдЧреИрдореНрд╕ рдХреНрд░реЗрдбрд┐рдЯ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрддрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рдиред
 rake release 

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

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


1. рдПрдХ рдорд╛рдЙрдВрдЯреЗрдмрд▓ рд░реЗрд▓ рд░рддреНрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВ:
рдХрдВрдХрд╛рд▓ рдмрдирд╛рдПрдБ
 rails plugin new tail --mountable 

2. рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд░реЗрд▓ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рднрд░реЗрдВ
рдорд╛рдореВрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрдо рд╣реИрдВ рдФрд░ рд╡реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред
рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЖрдкрдиреЗ test/dummy/ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ rails server рдЪрд▓рд╛рдХрд░ рдХреНрдпрд╛ рдХрд┐рдпрд╛

3. рдПрдХ рд░рддреНрди рдмрдирд╛рдПрдБ
 rake build 

4. rubygems.org рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ:
 gem push 

рдЬрд╛рд░реА рдХрд░реЛ
 rake release 

рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдордгрд┐ рдХреЗ рдЦреБрд╢ рдорд╛рд▓рд┐рдХ рд╣реИрдВ

рд╡реИрд╕реЗ, рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдордп рдорд╛рдгрд┐рдХ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░реЗ рдордгрд┐ рдХреЛ 151 рдмрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реИред

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

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд▓реЗрдЦ, рдФрд░ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдордгрд┐ рдЕрдкрдиреЗ рдЖрдк рдЙрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рдХреЗ рд╕рдордп рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред



рд╕рдВрджрд░реНрдн


http://wangjohn.imtqy.com/railties/rails/gsoc/2013/07/10/introduction-to-railties.html
http://blog.thepete.net/2010/11/creating-and-publishing-your-first-ruby.html
рд░реВрд╕реА рдореЗрдВ рд░реЗрд▓
Github.com рдкрд░ рд╣реА рд░рддреНрди
рд╡рд╣ rubygems.org рдкрд░ рд╣реИ

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


All Articles