рд╢рд┐рдХрд╛рдЧреЛрдмреЙрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╡рд┐рдХрд╛рд╕

рдЪрд┐рдХреЛрд╕ рдмреЙрд╕
"рд╢рд┐рдХрд╛рдЧреЛ рдмреЙрд╕ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ, рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдФрд░ рдЗрд╕ рдкреЗрдЬрд░ рдЖрджрдореА рджреНрд╡рд╛рд░рд╛ рдкреНрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред" - ┬й chicagoboss.org

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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп Erlang рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджрд░реНрд╢рдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдШрд░реЗрд▓реВ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣ рдкреЛрд╕реНрдЯ рдореЗрд░реЗ рдПрдХ рдорд┐рддреНрд░ рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ рдереА рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ (рдЗрд╡рд╛рди рдорд┐рд▓рд░) рдХреЛ рдЬрд╛рдирддрд╛ рдерд╛ рдФрд░ рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд░рд╣рд╛ рд╣реИред

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




рдкреГрд╖реНрдарднреВрдорд┐:
рдпрд╣ рдЕрдХреНрдЯреВрдмрд░ 2010 рдореЗрдВ рдЕрдЧрд▓реЗ рдПрд░реНрд▓рд╛рдВрдЧ рд╕рдВрдЧреЛрд╖реНрдареА , рд╢рд┐рдХрд╛рдЧреЛ, рдЗрд▓рд┐рдиреЛрдЗрд╕ рдореЗрдВ рдерд╛ред рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реБрдЖ (рдПрдХ рджреЛрд╕реНрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░): рдореИрдВрдиреЗ рдХрдорд░реЗ рдореЗрдВ рдЙрд╕рдХреА рдЖрд╡рд╛рдЬрд╝ рд╕реБрдиреА, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП, "рдореИрдВ рдПрд░реНрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрд▓ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ" рдФрд░ 99 рд▓реЛрдЧ рдЧрдП, "рд╣рд╛рдБ, рд╕рд╣реА рд╣реИ!" ( рдЕрдиреБрд╡рд╛рдж: рдЙрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╛рдЬрд╝ рд╕реБрдиреА) рдкреВрд░реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП: "рдореИрдВ рдПрд░реНрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ" рдФрд░ 99 рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд╣рд╛ "рдЕрд╣рд╛, рдмрд┐рд▓реНрдХреБрд▓!" )ред рдЗрд╕ рд▓рдбрд╝рдХреЗ рдХрд╛ рдирд╛рдо рдЗрд╡рд╛рди рдорд┐рд▓рд░ рдерд╛ред рд╕рдВрдЧреЛрд╖реНрдареА рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рджреЛрд╕реНрдд рдиреЗ рдЙрдирд╕реЗ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реЗрд▓" рдореЗрдВ рдирд┐рд╣рд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛ред рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рдереЗ, рдФрд░ рддрдм рд╕реЗ рд╡реЗ рдЕрдкрдирд╛ рд╕рд╛рд░рд╛ рдЦрд╛рд▓реА рд╕рдордп рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рд╛рде рдЗрд╡рд╛рди рдХреА рдорджрдж рднреА рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рднреА рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ред

  1. рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
  2. рд╕реНрдерд╛рдкрдирд╛
  3. рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ)
  4. рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
  5. рдПрдХ DB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
  6. CRUD
  7. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛
  8. рдкрд░рд┐рдгрд╛рдо
  9. рд╕рд╛рдзрди


рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ / рджреЗрдЦрдиреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛ рд╣реЛрдЧреАред рдпрд╛рдиреА рд╣рдо рдорд╛рдирдХ CRUD рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП: рдкреВрд░реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧрднрдЧ 4-5 рдШрдВрдЯреЗ рд▓рдЧреЗ, рдЬрд┐рдирдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди, рдЯреНрдпреВрдирд┐рдВрдЧ рдЯреВрд▓ рдФрд░ рд▓рд░реНрдирд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
Ubuntu 11.10 32bit, Erlang R15B , ChicagoBoss MVC рдлреНрд░реЗрдорд╡рд░реНрдХ, MongoDB рдбреЙрдХреНрдпреВрдореЗрдВрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕, Gedit with iskin's Gmate plugin package (Gedit рдЕрднреА рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рд╣реИ)ред

рдореИрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЙрдмрдВрдЯреВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдРрд╕реЗ рд╣реЛрдВ рдЬреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ / рдореИрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

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

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

рд╕реНрдерд╛рдкрдирд╛


Erlang

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрд░реНрд▓рд╛рдВрдЧ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд░реЗрдкреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдкрд╛рд╕ Ubuntu 11.10 32 рдмрд┐рдЯ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ 64-рдмрд┐рдЯ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл Ubuntu 11.04 32 рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдореМрдЬреВрджрд╛ рдереНрд░реЗрдбреНрд╕ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╡реНрдпреВрдЗрдВрдЧ ( рдПрдкрдореЛрди рдпреВрдЯрд┐рд▓рд┐рдЯреА )ред



рд▓реЗрдХрд┐рди рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдпрд╣ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдФрд░ рд╣рд╛рдВ, рдЖрдк рд╣рдореЗрд╢рд╛ рд╕реНрд░реЛрдд рд╕реЗ рдУрдПрд╕ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :) рдореЗрд░реЗ рджреЛрд╕реНрдд рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП 5 рдмрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдПрдХрддреНрд░ рдХрд┐рдП рд╣реИрдВ: рдЙрдмрдВрдЯреВ рдФрд░ рдореИрдХред рд╡рд╣ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмреЗрд╢рдХ рдпрд╣ рдмрд╡рд╛рд╕реАрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╢рд╛рдо рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдЖрдк рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП Erlang-Solutions рд╕реЗ рднреА рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рдЙрддреНрддрд░рджрд╛рдпреА рд╣реИрдВред

рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рдпрд╛ рдЧрдпрд╛:
installing esl-erlang 1:15.b
size - 63.8 mb

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ erl рдХрдорд╛рдВрдб рд▓рд┐рдЦреЗрдВред рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреБрдЫ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:
Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9

ChicagoBoss

рдЖрдк рдмрд┐рдирд╛ рдЧрд┐рдЯ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рд╡рд┐рдХрд╛рд╕ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рд╣реИ рддреЛ Git рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
apt-get install git-core
рд╣рдореЗрдВ рд╢рд┐рдХрд╛рдЧреЛрдмреЙрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдорд┐рд▓рддреА рд╣реИ:
git clone git://github.com/evanmiller/ChicagoBoss.git

рд╣рдо рдЖрдкрдХреЗ рд░реЗрдкреЛ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ:
cd ChicagoBoss
рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ:
./rebar get-deps clean compile

рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП):
make app PROJECT=your_project_name_here
рддреЛ:
cd ../your_project_name_here

рдбрд┐рдмрдЧ (рдбреЗрд╡рд▓рдкрд░) рдореЛрдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
./init-dev.sh
рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
./init.sh start

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

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

MongoDB

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред рдЙрдмрдВрдЯреВ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЯреАрдо:
apt-get install mongodb

рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
mongo
рдпрд╛
ps aux | grep mongo
рдЖрдк рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 28017 рдкрд░ рднреА рджрд╕реНрддрдХ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореВрд▓ рдкреЛрд░реНрдЯ рдЬрд┐рд╕ рдкрд░ рдЖрдорддреМрд░ рдкрд░ рдореИрдВрдЧреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, 27017 рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ 28017 рд╣реИред

MongoDB рд╕рд░реНрд╡рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
$ sudo status mongodb
$ sudo stop mongodb
$ sudo start mongodb
$ sudo restart mongodb

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

$ sudo rm /var/lib/mongodb/mongod.lock
$ sudo -u mongodb mongod -f /etc/mongodb.conf --repair

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

рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ)


рдореИрдВрдиреЗ Gmate plugin рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ред рдЗрдирдореЗрдВ рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдЬрд╝реЗрди рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдореЗрд░реЗ рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдЧрд░реАрдмреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдЪрдПрдПрдордПрд▓ рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рддрдХ "рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛" рд╣реИред
рдФрд░ рдореИрдВ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ ( рд╕реНрдирд┐рдкреЗрдЯреНрд╕ ) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдкреНрд▓рдЧрдЗрди Gedit рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ -> рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ -> рдкреНрд▓рдЧрдЗрдиреНрд╕ -> рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдкрд░ рдЬрд╛рдПрдВред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдмрд╕ рдЙрдкрдХрд░рдг рдЦреЛрд▓реЗрдВ -> рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ -> "your_language" рдФрд░ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рдЬреЛрдбрд╝реЗрдВред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ ред рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 3 рдорд┐рдирдЯ рд▓рдЧреЗ рдФрд░ рдлрд┐рд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 15 рдорд┐рдирдЯред рд▓реЗрдХрд┐рди рдлрд┐рд░ div рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдХрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЯреИрдм рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
 <div> </div> 

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

рдФрд░ рд╣рд╛рдБ, Emacs, Notepad ++ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рднреАред

рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рд╕рдм рдХреБрдЫ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╢рд┐рдХрд╛рдЧреЛрдмреЙрд╕ рдХреЗ рд╕рд╛рде рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
make app PROJECT=addressbook

рд╣рд╛рдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рдПрдХ рд╡реИрдз рдкрд░рдорд╛рдгреБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рдорд╛рдгреБ рдПрдХ рдирд╛рдорд┐рдд рдирд╛рдо рд╣реИред рдирд╛рдо рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╛рдо рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ рдирдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдВрджрд░ рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ / рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд╣реЗрд░рдлреЗрд░ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдирдИ рдмрдирд╛рдИ рдЧрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ
cd ../addressbook

рд╣рдорд╛рд░реЗ рд╕рднреА рдХреЛрдб / рд╕рдВрд╕рд╛рдзрди src рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛:


Src рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛:

рд╕рдВрд╕рд╛рдзрди рдлрд╛рдЗрд▓реЗрдВ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕реАрдПрд╕рдПрд╕, рдореАрдбрд┐рдпрд╛ рдлрд╛рдЗрд▓реЗрдВ) / рдирд┐рдЬреА / рд╕реНрдерд┐рд░ / рдореЗрдВ рд╣реИрдВ ред рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХрдиреЗрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 <link rel="stylesheet" href="/static/css/style.css" type="text/css" charset="utf-8" /> 


рд╣рдо рдмреЙрд╕ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ редconfig, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ:
{db_host, "localhost"},
{db_port, 27017},
{db_adapter, mongodb},
{db_database, рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛},
{db_write_mode, safe},
{db_read_mode, рдорд╛рд╕реНрдЯрд░},

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ (рдФрд░ рд╕рд┐рд░реНрдл рдкрд░реНрдпрд╛рд╡рд░рдг):


рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рд╢рдмреНрдж рдкреБрд╕реНрддрд┐рдХрд╛ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдореБрдЭреЗ рдмрд╛рдж рдореЗрдВ рд╕рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдирд╛рдо рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХреБрдЫ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, src / model / рдореЗрдВ address.erl рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 -module(address, [Id, Firstname, Lastname, Address1, Address2, City, State, Country, Active, CreationTime, ModifictionTime ]). -compile([export_all]). 


рдЖрдЗрдП addressbook_main_controller.erl ( appname_controllername_controller ) рдирд╛рдо рдХрд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдЕрдВрджрд░ рд▓рд┐рдЦреЗрдВ:
 -module(addressbook_main_controller, [Req, SessionID]). -compile([export_all]). index('GET', [])->{ok, [{data, "Hello World"}]}. 


рд╕реВрдЪрдХрд╛рдВрдХ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд╣реИ
"->" рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рд╣реИред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди GET рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ рдФрд░ рд╕рдлрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░, рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╣рдорд╛рд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдареАрдХ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
 index('GET', [])-> {ok, [{data, "Hello World"}]}; {error, Reason}-> Reason. 


рдкреГрд╖реНрда рдкрд░ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ {{data}} рдЯреИрдЧ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, / src / view / main / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣рдорд╛рд░реА рдкрд╣рд▓реА html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдЪрд▓реЛ рдЗрд╕реЗ index.html рдХрд╣рддреЗ рд╣реИрдВ:
 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>My addressbook</title> </head> <body> <form> <div id="main"> {{data}} </div> </form> </body> </html> 


рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдорд╛рд░реНрдЧреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ /priv/addressbook.routes рдФрд░ рдЕрдкрдирд╛ рдирдпрд╛ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рдорд╛рд░реНрдЧ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ):
 {"/", [{controller, "main"}, {action, "index"}]}. 

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕рдВрдХрд▓рди ред/rebar рд╕рдВрдХрд▓рди
рдФрд░ рдЪрд▓рд╛ ред/init-dev.sh

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

рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЖрдк рд╕рдЦреНрддреА рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкрддреЗ рдкрд░ рдХреМрди рд╕рд╛ рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред рдпрд╛ рдЖрдк рдкрддреЗ рдореЗрдВ рдлрд╝реЙрд░реНрдо / [рдирд┐рдпрдВрддреНрд░рдХ рдирд╛рдо] / [рдХреНрд░рд┐рдпрд╛ рдирд╛рдо] рдХрд╛ рдкреВрд░рд╛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдирд╛рдо рдХрд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ: 8001 / рдореЗрди / рдХреНрд░рд┐рдПрдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛:
 {"/create", [{controller, "main"}, {action, "create"}]}. 

рдФрд░ рдлрд┐рд░ рдХреЙрд▓ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛: 8001 / create

рдПрдХ DB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдЬрдм рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ рддрдм рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ ред/init-dev.sh, рджрдмрд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдИ рдЦреБрд▓реА рд▓рд╛рдЗрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВ рдФрд░ рджрд░реНрдЬ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 boss_db:find(address, []). 


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

[] - рдХрд╛ рдЕрд░реНрде рд╣реИ "рдкреИрд░рд╛рдореАрдЯрд░"ред рдпрджрд┐ рдмреНрд░реИрдХреЗрдЯ рдЦрд╛рд▓реА рд╣реИрдВ, рддреЛ рдЖрдк 0 рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЦреЛрдЬ рдЖрджреЗрд╢ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЙрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП firstname = "ivan"
 boss_db:find(address, [{firstname, "ivan"}]). 

рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдЖрдк рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рдеред

CRUD


рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЖрдк рдирдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдБ:
 create('GET', [])->ok; create('POST', [])-> Firstname = Req:post_param("firstname"), Lastname = Req:post_param("lastname"), Address1 = Req:post_param("address1"), Address2 = Req:post_param("address2"), City = Req:post_param("city"), State = Req:post_param("state"), Country = Req:post_param("country"), Active = Req:post_param("active"), CreationTime = erlang:now(), ModificationTime = erlang:now(), NewAddress = address:new(id, Firstname, Lastname, Address1, Address2, City, State, Country, Active, CreationTime, ModificationTime), case NewAddress:save() of {ok, SavedAddress}-> {redirect, [{action, "index"}]}; {error, Reason}-> Reason end. 


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реА рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдИрдбреА рдЕрдкрдиреЗ рдЖрдк рдмрди рдЬрд╛рддреА рд╣реИред
рдЖрдИрдбреА рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рд╢рдмреНрдж рд╣реИред
Id - рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдВ, рднрд╛рд╖рд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред

рдЕрдм рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред html:
 <!DOCTYPE html> <html> <head> <title>My addressbook</title> </head> <body> <form method="post"> <header></header> <div id="main"> <table> <tr><td>Frist name</td> <td><input type="text" id="firstname" name="firstname" size="45" maxlength="255" value="" /></td></tr> <tr><td>Last name</td> <td><input type="text" id="lastname" name="lastname" size="45" maxlength="255" value="" /></td></tr> <tr><td>Address1</td> <td><input type="text" id="address1" name="address1" size="45" maxlength="255" value="" /></td></tr> <tr><td>Address2</td> <td><input type="text" id="address2" name="address2" size="45" maxlength="255" value="" /></td></tr> <tr><td>City</td> <td><input type="text" id="city" name="city" size="45" maxlength="255" value="" /></td></tr> <tr><td>State</td> <td><input type="text" id="state" name="state" size="45" maxlength="255" value="" /></td></tr> <tr><td>Country</td> <td><input type="text" id="country" name="country" size="45" maxlength="255" value="" /></td></tr> <tr><td>Active</td> <td><input type="checkbox" id="active" name="active" value="true" /></td></tr> </table> <button type="submit">Submit</button> </div> </form> </body> </html> 


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

рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ рдЧрдП рдЗрдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓реЗрдВ):
 index('GET', [])->Addresses = boss_db:find(address, []), {ok, [{addresses, Addresses}]}. 


рд╣рдорд╛рд░реЗ index.html рдкреЗрдЬ рдХрд╛ рдХреЛрдб рднреА рдмрджрд▓реЗрдВ:
 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>My addressbook</title> </head> <body> <form method="post"> <header></header> <div id="main"> <table cellspacing="0" cellpadding="0"> <tr> <th>First name</th> <th>Last name</th> <th>City</th> <th>Address1</th> <th>Address2</th> <th>State</th> <th>Country</th> <th>Active</th> </tr> {% if addresses %} {% for address in addresses %} <tr> <td>{{address.firstname}}</td> <td>{{address.lastname}}</td> <td>{{address.city}}</td> <td>{{address.address1}}</td> <td>{{address.address2}}</td> <td>{{address.state}}</td> <td>{{address.country}}</td> <td>{{address.active}}</td> </tr> {% endfor %} {% endif %} </table> </div> </form> </body> </html> 


рд╢рд┐рдХрд╛рдЧреЛрдмреЙрд╕ рдиреЗ ErlyDTL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Django рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред Django рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд╖рд╛ ред

рдЕрдм, рдЬрдм рдкрддреЗ / рдореБрдЦреНрдп / рдФрд░ / рдореБрдЦреНрдп / рдмрдирд╛рдиреЗ рдкрд░ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реВрдЪрдирд╛ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде 2 рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред

рдХрд┐рд╕реА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ (рд╣рдЯрд╛рдиреЗ) рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗ:
 delete('GET', [Id])-> boss_db:delete(Id), {redirect, [{action, "index"}]}. 

рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕реЗ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХрд╣рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ : 8001 / рдореБрдЦреНрдп / рдбрд┐рд▓реАрдЯ / [рдЖрдИрдбреА]

рд░рд┐рдХреЙрд░реНрдб рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рд╢реЛ), рдЗрд╕ рдлрдВрдХреНрд╢рди рдХреЛ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 show('GET', [Id])-> Address = boss_db:find(Id), {ok, [{address, Address}]}. 


рджреГрд╢реНрдп рдлрд╝рд╛рдЗрд▓ рд╢реЛ рдмрдирд╛рдПрдВред html:
 <!DOCTYPE html> <html> <head> <title>My addressbook</title> </head> <body> <form method="post"> <div id="main"> <table cellspacing="0" cellpadding="0"> {% if address %} <tr><td>First name</td><td>{{address.firstname}}</td></tr><tr> <td>Last name</td><td>{{address.lastname}}</td></tr><tr> <td>City</td><td>{{address.city}}</td></tr><tr> <td>Address1</td><td>{{address.address1}}</td></tr><tr> <td>Address2</td><td>{{address.address2}}</td></tr><tr> <td>State</td><td>{{address.state}}</td></tr><tr> <td>Country</td><td>{{address.country}}</td></tr><tr> <td>Modification time</td><td>{{address.modification_time}}</td></tr><tr> <td>Creation time</td><td>{{address.creation_time}}</td></tr><tr> <td>Active</td><td>{{address.active}}</td></tr> {% endif %} </table> </div> </form> </body> </html> 


рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╕рдВрдкрд╛рджрди рдмрдирд╛рдирд╛ рдФрд░ рджрд┐рдЦрд╛рдирд╛ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рджреЛ рдФрд░ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ:
 edit('GET', [Id])-> Address = boss_db:find(Id), {ok, [{address, Address}]}; edit('POST', [Id])-> Address = boss_db:find(Id), NewAddress = Address:set([{firstname, Req:post_param("firstname")}, {lastname, Req:post_param("lastname")}, {address1, Req:post_param("address1")}, {address2, Req:post_param("address2")}, {city, Req:post_param("city")}, {state, Req:post_param("state")}, {country, Req:post_param("country")}, {active, Req:post_param("active")}, {modification_time, erlang:now()}]), case NewAddress:save() of {ok, SavedAddress}-> {redirect, [{action, "index"}]}; {error, Reason}-> Reason end. 

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрд░реНрд▓реИрдВрдЧ рдореЗрдВ рд╕рднреА рдЪрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ! рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдЪрд░ рдХреА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ NewAddress рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред
рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рд╢реЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рджреВрд╕рд░рд╛ рдлреЙрд░реНрдо рдореЗрдВ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
 <!DOCTYPE html> <html> <head> <title>My addressbook</title> </head> <body> <form method="post"> <table cellspacing="0" cellpadding="0"> {% if address %} <tr><td>First name</td><td><input type="text" id="firstname" name="firstname" size="45" maxlength="255" value="{{address.firstname}}" /></td></tr><tr> <td>Last name</td><td><input type="text" id="lastname" name="lastname" size="45" maxlength="255" value="{{address.lastname}}" /></td></tr><tr> <td>City</td><td><input type="text" id="city" name="city" size="45" maxlength="255" value="{{address.city}}" /></td></tr><tr> <td>Address1</td><td><input type="text" id="address1" name="address1" size="45" maxlength="255" value="{{address.address1}}" /></td></tr><tr> <td>Address2</td><td><input type="text" id="address2" name="address2" size="45" maxlength="255" value="{{address.address2}}" /></td></tr><tr> <td>State</td><td><input type="text" id="state" name="state" size="45" maxlength="255" value="{{address.state}}" /></td></tr><tr> <td>Country</td><td><input type="text" id="country" name="country" size="45" maxlength="255" value="{{address.country}}" /></td></tr><tr> <td>Active</td><td><input type="checkbox" id="active" name="active" value="{{address.active}}" /></td></tr> {% endif %} </table> <button type="submit">Submit</button> </form> </body> </html> 

рдЦреИрд░ рдпрд╣ рд╕рдм рд╣реИ, рд╣рдорд╛рд░рд╛ CRUD рддреИрдпрд╛рд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛


рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВ рд▓реЙрдЧрд┐рди, рдкрдВрдЬреАрдХрд░рдг, рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА, рдЪреИрдЯ, рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ (рд╕рднреА рд╕рд╛рдЗрдЯ рдХреЛрдб рдЬреАрдердм рдкрд░ рд╣реИ, рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдВрдХ) рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред

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

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЛ рдХрд┐рд╕реА рднреА рдирдИ рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдпрд╣ 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдореБрдЭреЗ рдПрдХ рдорд╛рд╕реНрдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд▓рд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="/static/css/style.css" type="text/css" charset="utf-8" /> <title>{% block title %}My amazing site{% endblock %}</title> {% block res %} {% endblock %} </head> <body> <header> {% if person %} Hello, {{person.name}} (<a href="/user/logout">Quick, Log Me Out!</a>) <br /> {% endif %} Your IP: {{ip}} </header> <nav> <ul class="nav"> <li class="nav"><a href="/">Home</a></li> <li class="nav"><a href="/create">Create</a></li> <li class="nav"><a href="/chat/live/public">Chat</a></li> <li class="nav"><a href="/user/login">Login</a></li> <li class="nav"><a href="/user/showall">Users</a></li> </ul> </nav> <section> {% block content %}{% endblock %} </section> <footer> {% block footer %}{% endblock %} </footer> </body> </html> 

рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдм рдореЗрд░рд╛ show.html рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 {% extends "layout/application.html" %} {% block title %}My addressbook{% endblock %} {% block content %} <table cellspacing="0" cellpadding="0"> {% if address %} <tr><td>First name</td><td>{{address.firstname}}</td></tr><tr> <td>Last name</td><td>{{address.lastname}}</td></tr><tr> <td>City</td><td>{{address.city}}</td></tr><tr> <td>Address1</td><td>{{address.address1}}</td></tr><tr> <td>Address2</td><td>{{address.address2}}</td></tr><tr> <td>State</td><td>{{address.state}}</td></tr><tr> <td>Country</td><td>{{address.country}}</td></tr><tr> <td>Modification time</td><td>{{address.modification_time}}</td></tr><tr> <td>Creation time</td><td>{{address.creation_time}}</td></tr><tr> <td>Active</td><td>{{address.active}}</td></tr> {% endif %} </table> {% endblock %} 

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

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

рдкрд░рд┐рдгрд╛рдо


рдпрд╣рд╛рдВ рджреЛ рджрд┐рди рдмрд╛рдж рд╕рд░реНрд╡рд░ рдХреЗ рдирддреАрдЬреЗ рдЖрдПрдВрдЧреЗред

UPD: рдлрд┐рд▓рд╣рд╛рд▓, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА, рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
рд╕рд╛рдЗрдЯ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдмрд┐рдирд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд╛рдЗрдЯ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдереА рдХрд┐ рддрдХрдиреАрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред

UPD: 30 рдорд╛рд░реНрдЪ рдХреЛ рд╣реА рд╣реИрдмреНрд░реИрдлреЗрдХреНрдЯ рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╢реЗрд╖ рджрд┐рдиреЛрдВ рдореЗрдВ, рд╡рд┐рдЬрд╝рд┐рдЯ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдЧрд┐рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Google Analytics рдФрд░ рдореЗрд░реЗ рд╕реНрдерд╛рдиреАрдп рд▓реЙрдЧ рдкреНрд░рддрд┐ рджрд┐рди рдХреЗ рдЕрдиреБрд╕рд╛рд░:
- рд╕рд╛рдЗрдЯ рдкрд░ 1489 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
- рдкреГрд╖реНрда рд╡рд┐рдЪрд╛рд░ - 9070
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА - 43051
- рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЪреИрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ ~ 100

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

рд╣рд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХрднреА рднреА рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдореБрдЭреЗ рдХреЗрд╡рд▓ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдирд╛рдореЛрдВ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рд▓реВрдЯреЗрд░реЛрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рд╕рд╛рдзрди


рдкрд░реАрдХреНрд╖рд╛ рд╕реНрдерд▓ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ
рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

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

рдЗрд╡рд╛рди рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рддреНрдордХ рд╡реАрдбрд┐рдпреЛ: рдПрдкрд┐рд╕реЛрдб 1 , рдПрдкрд┐рд╕реЛрдб 2 , рдПрдкрд┐рд╕реЛрдб 3
Erlang рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ ред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдордЧреНрд░реАред

рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдФрд░ рд╢рд┐рдХрд╛рдЧреЛрдмреЙрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░
Nodejs рдФрд░ Erlang рдХреА рддреБрд▓рдирд╛
рдПрдХ рд▓рд╛рдЦ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реЗрд╡рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ!

Django рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд╖рд╛ ред Django рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рд╕реНрдЯрдоред

рд╢рд┐рдХрд╛рдЧреЛрдмреЙрд╕ рдЧреВрдЧрд▓ рдЧреНрд░реБрдк

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


All Articles