
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ - рд░реВрдмреА рдСрди
рд░реВрд▓реНрд╕ ,
рд▓реАрдЧреЗрд╕реА_рдорд┐рдЧреНрд░реЗрд╢рди рд╣реЗрдо рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реАрдзреЗ рд╣рд╛рдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдПрдХ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐
рдПрдХ рдЧрдВрднреАрд░ рднрд╛рд░реЛрддреНрддреЛрд▓рди рдХреЗ рдмрд┐рдирд╛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ 3 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдПрдХ рднрд░реА рд╣реБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рд╕реВрдЬрди рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдХрд╛рдлреА рдкреБрд░рд╛рдиреА рд╣реИрдВред рд╕рдм рдХреБрдЫ рдирдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
рдкреБрд░рд╛рдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ:
- рд░реЗрд▓ 2.3.4 (рдмрд╛рдж рдореЗрдВ рдмрдВрдбрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 2.3.12 + рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд)
- MySQL 5
- рд╕реНрдлрд┐рдВрдХреНрд╕, рд╡рд┐рд▓рдВрдмрд┐рдд рдиреМрдХрд░реА, рдПрдЖрд░ рдкреНрд░реЗрд╖рдХ, рдЗрдВрдЯрд░рд▓реЙрдХрд┐рдВрдЧ + рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдФрд░ рдмрд╛рдХреА рдЪреАрдЬреЗрдВ
рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛:
- рд░реЗрд▓рдЧрд╛рдбрд╝реА 3.1.0.rc5 (рд╡рд░реНрддрдорд╛рди рдореЗрдВ)
- Postgresql 8.4 (рд╢рд╛рдпрдж 9 рдмрд╛рдж рдореЗрдВ)
- рдЕрднреА рднреА рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЬрд▓реНрджрдмрд╛рдЬреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕реЛрд▓реНрд░ , рд░реЗрдбрд┐рд╕ , рд░реЗрд╕рдХ рдХреЛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЪреБрдиреЗ рд╣реБрдП рдиреЗ рдЕрдВрддрддрдГ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рд╛рдордЧреНрд░реА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдпрд╛ рдЬреЛ рд░рд┐рдХреЙрд░реНрдб рдЖрдИрдбреА рдмрдЪрд╛рддрд╛ рд╣реИ, рд░рд┐рдХреЙрд░реНрдб рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдмрдЪрд╛рддрд╛ рд╣реИ, рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдореМрдЬреВрджрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде, рдпрд╣
рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред
рдордгрд┐ рд╡рд┐рд░рд╛рд╕рдд_рдорд┐рд╢реНрд░рдг
рдЕрд░реНрдз-рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЦреЛрдЬ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
рдордгрд┐ рдкрд╛рдпрд╛ рдЧрдпрд╛ (ror2ru рд╕рдореВрд╣ рдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ), рд░реЗрд▓ 2.3.x рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрд╛ рдЧрдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдореЙрдбрд▓ рдХреЗ рдордирдорд╛рдиреЗ рдЧреБрдгреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреВрд╕рд░реЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрди рдкрд░ рдордирдорд╛рдирд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рдереА, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдорд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдЧрдИ:
- рдЖрдИрдбреА рд░рд┐рдХреЙрд░реНрдб рд╕рд╣реЗрдЬреЗ рдирд╣реАрдВ рдЧрдП рдереЗ (рдЙрд╕рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдЗрдбреА = 1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдвреЗрд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛)
- рдЕрд╕реНрдерд╛рдпреА рд░рд┐рдХреЙрд░реНрдб рд╕реНрдЯреИрдореНрдк рд╕рд╣реЗрдЬреЗ рдирд╣реАрдВ рдЧрдП рдереЗ (рдЕрджреНрдпрддрд┐рдд_рдПрдЯ, рдирд┐рд░реНрдорд┐рдд_рдд)
- рдЬрдм рд░реЗрдХ рдХрд╛рд░реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдИ рдЖрдИрдбреА рдХреЗ рддрд╣рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреА рдЖрдИрдбреА рдХреНрдпреЛрдВ рд░рдЦрдиреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рддрд░реАрдХрд╛ рд╣реИ - рдЗрд╕ рдкрд░ рдкреБрд░рд╛рдиреЗ рдЖрдИрдбреА рдФрд░ рдлрд┐рд░ рд╕реЗ рдирдИ рдЖрдИрдбреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╕рднреА рдпреВрдЖрд░рдПрд▓ рдХреА рдкрд╣рдЪрд╛рди рдХрд╛ рдЕрд░реНрде рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣ рд╕рдбрд╝рдХ рдкрд░ рдПрдХ рдПрд╕рдИрдУ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдпреВрдЖрд░рдПрд▓ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкреЛрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдмреЗрд╣реЛрд╢реА рд╕реЗ рд▓реЗрдХрд░ рдордиреЛрд╡рд┐рдХрд╛рд░ рддрдХ :)
рдкрд╣рдЪрд╛рдиреА рдЧрдИ рдХрдорд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣
рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдпрд╛ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдЖрдк
рдпрд╣рд╛рдБ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдЖрд░ рдореЙрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИ - рдХрдо рдкреНрд░рджрд░реНрд╢рди, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ (рдХреБрд▓ рд▓рдЧрднрдЧ 400 рдПрдордмреА) рдирд┐рдХрд▓рд╛, рдФрд░ рд╕рд░реНрд╡рд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╕рдордп рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ (рдФрд░ 2.3.4 рд╕реЗ 2.3.12 рддрдХ рд░реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдЙрдиреНрдирдд рдХрд░рддрд╛ рдерд╛), рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдереЗ - рдЖрд╡рдзрд┐рдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
рдЖрд╡рд╢реНрдпрдХ рд░рддреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ DBMS рдХреЗ рд▓рд┐рдП рдПрдбреЗрдкреНрдЯрд░ Gemfile рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
gem 'mysql2' gem 'pg'
рд╡рд┐рд░рд╛рд╕рдд рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ_рд╕реНрдорд░рдг -
рдХрд╛рдВрдЯрд╛ (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓рд╛рд╡ рдХрд░ рдЪреБрдХрд╛ рд╣реИ) рдпрд╛ рдореВрд▓ рдордгрд┐ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде (рдореИрдВ рдХреНрд░рдорд╢рдГ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЗрдордлрд╛рдЗрд▓ рд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ):
gem 'legacy_migrations', :git => 'git://github.com/Antiarchitect/legacy_migrations.git' gem 'legacy_migrations', :path => 'vendor/gems/legacy_migrations-0.3.7'
рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдордгрд┐ рдорд╛рд░реНрдЧ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрджреЗрд╢ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
gem unpack legacy_migrations --target vendor/gems
рдХрд╛рд░реНрдп рд╕рд┐рджреНрдзрд╛рдВрдд
рд▓реАрдЧреЗрд╕реА_рдорд┐рдЧреНрд░реЗрд╢рди рдХрд╛ рд╕рд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдРрд╕реЗ рдореЙрдбрд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирд╕реЗ рд╣рдо рдбреЗрдЯрд╛ рдФрд░ рдореЙрдбрд▓ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЗрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдорд┐рд░рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ config / database.yml рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
production: adapter: postgresql encoding: utf8 database: newapp_production username: postgres password: somecomplicatedpassword legacy: adapter: mysql2 encoding: utf8 database: oldapp_production username: root password: anothercomplicatedpassword
рдЬрд╣рд╛рдВ рд╡рд┐рд░рд╛рд╕рдд рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ (рдирд╛рдо рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореЙрдбрд▓ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдЧреЗ рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдХреНрдд рдЙрдкрд╕рд░реНрдЧ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЙрдкрд╕рд░реНрдЧ "рдкреБрд░рд╛рдирд╛" рдерд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдРрдк / рдореЙрдбрд▓ / рдкреБрд░рд╛рдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЛ рд╡рд╣рд╛рдБ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╕реЗ рдЕрдиреНрдп рд╕рднреА рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдРрдк / рдореЙрдбрд▓ / рдкреБрд░рд╛рдирд╛ / рдкреБрд░рд╛рдирд╛_рдмреЗрд╕ / рдЖрд░рдмреА:
class OldBase < ActiveRecord::Base self.abstract_class = true establish_connection 'legacy' end
рдЬрд╣рд╛рдВ рддрд░реНрдХ 'рд╡рд┐рд░рд╛рд╕рдд' рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ / рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧ рд╕рдореВрд╣ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдУрд▓реНрдбрдмреЗрд╕ рд╡рд░реНрдЧ (рдФрд░ рд╕реАрдзреЗ ActiveRecord :: Base) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╕рднреА рдореЙрдбрд▓ рдХреЛ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдРрд╕реЗ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
class OldNewsDoc < OldBase set_table_name 'news_docs' end
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрдм рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛, рдЖрдкрдХреЛ рд╕реАрдзреЗ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдореЙрдбрд▓ / рдкреБрд░рд╛рдиреЗ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдкрде рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
module NewApp class Application < Rails::Application ... config.autoload_paths += %W(
рдФрд░ рдлрд┐рд░ рдПрдХ рд░реЗрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ (lib / рдХрд╛рд░реНрдп / рд╡рд┐рд░рд╛рд╕рдд редrake):
require 'legacy_migrations' namespace :legacy do namespace :transfer do desc 'Transfers News Docs from onru to onru2' task :news_docs => :environment do transfer_from OldNewsDoc, :to => NewsDoc do from :id, :to => :id from :updated_at, :to => :updated_at from :created_at, :to => :created_at from :news_rubric_id, :to => :news_rubric_id from :title, :to => :title from :annotation, :to => :annotation from :text, :to => :text end end end end
рдпрд╣ рдмрд╛рдд рд╣реИ - рдЕрдм рдЗрд╕ рддрд░рд╣ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
bundle exec rake legacy:transfer:news_docs RAILS_ENV=production
рдЗрд╕ рд▓реЗрдЦрдХ рдХреА
рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рд╡рд┐рд░рд╛рд╕рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди
рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдХ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╣ рджрд╕рд╡рд╛рдВ рдорд╛рдорд▓рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдЖрдпрд╛ред
рдЬрдм рднреА рдордгрд┐
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░рддреНрди рд╣реИ -
рдЬрдм рднреА - рдХреНрд░реЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ, рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ (рдЬреИрд╕реЗ рд░реЗрдХ рдХрд╛рд░реНрдп, рдзрд╛рд╡рдХ рдпрд╛ рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб) рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдХрд╛рд░реНрдп рдХрд┐рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрдм рднреА (Gemfile рдХреА рдПрдХ рдкрдВрдХреНрддрд┐) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
gem 'whenever', :require => false
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░реВрдЯ рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ
wheneverize .
рдФрд░ рдирд╡ рдирд┐рд░реНрдорд┐рдд config / schedule.rb рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд╛рд▓реЗрдВ:
job_type :rake, "rvm use ree && cd :path && RAILS_ENV=:environment bundle exec rake :task :output" if environment == 'production' every :day, :at => '2am' do rake "legacy:transfer:news_docs" end end
рдореИрдВ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд░реЗрдХ рдХрд╛рд░реНрдп рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ: рдореИрдВ рдХрд╕реНрдЯрдо рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЖрд░рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд░реВрдмреА рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреИрд╕реЗ рд╣реА рд░реЗрд▓ 3.1 рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдореИрдВ 1.9.2 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реВрдВ - рдЬрдмрдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ), рдореИрдВ рднреА рдмреЙрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдирд░реА рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдмрдВрдбрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдВред
рдпрд╣ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ (рддреИрдирд╛рддреАред рдЖрд░рдмреА):
require 'whenever/capistrano' ... set :whenever_command, "bundle exec whenever"
рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЛрдВрдЯреНрд░рд╛рдм рдореЗрдВ рд╕реБрдВрджрд░ рдФрд░ рд╕рд╛рдл рд▓рд╛рдЗрдиреЛрдВ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
crontab -l
рдкреАрдПрд╕ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рджреВрд╕рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЬреВрдЭ рд░рд╣реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдПрдВрдбреНрд░реЗ
рд╡реЛрд░реЛрдХреЛрдиреЛрд╡ ,
рдЗрд╡рд░реЛрди рдбреЙрдЯ рдХреЙрдо ред