рд╣рдорд╛рд░реЗ рд╕рдордп рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд╛рднреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд░реЗрдб рд╣реИрдЯ рд╣рдореЗрдВ рдореБрдлреНрдд рдореЗрдВ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде) рд╕рднреА рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рднреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?
- 1 рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХрд╛ рдЬреА.рдмреА.
- 3 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
- php 5.3, Ruby 1.9, Node.js 0.6, Perl 5.10, python 2.6 (3.3), Zend Server 5.6 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдФрд░ рдпрд╣ рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИред
рдареАрдХ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рднрд╛рд╖рд╛ рдирд╣реАрдВ рдорд┐рд▓реА, рддреЛ рдЖрдк рдПрдХ Do-It-Yourself рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо Django рдЖрд╡реЗрджрди рдХреА рддреИрдирд╛рддреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдиреБрдЕрд▓ рдорд┐рд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдиреБрдХрд╕рд╛рди рдиреЗ рдореБрдЭреЗ рдЯрд┐рдВрдХрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ред рдореИрдВ рдиреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП,
Openhift.com рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж,
rhc рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдгред рдпрд╣ рдмреЗрд╣рддрд░ рдХреНрдпреЛрдВ рд╣реИ? рд╣рд╛рдВ, рдЖрдк рдмрд╕ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдВрд╕реЛрд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рд╣реИред
рдЖрдк рдЗрд╕ рддрд░рд╣ ubuntu рдкрд░ rhc рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ sudo yum install rubygems git $ sudo gem install rhc
рдЕрдм рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:
$ rhc setup
рд╣реЛ рдЧрдпрд╛ред рд╣рдо рдСрдирд▓рд╛рдЗрди рд╣реИрдВред
рдПрдХ рдЕрдЬрдЧрд░ рдЖрд╡реЗрджрди рдмрдирд╛рдПрдБ:
$ rhc app create habr python-2.6
habr рдмреЗрд╢рдХ рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдо рд╣реИред
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдмрдирд╛рдпрд╛ рдФрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ:
http://habr-lamazavr.rhcloud.com/
, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ git рдкрддрд╛ (рдЗрд╕реЗ kudanibut рдХреЙрдкреА рдХрд░реЗрдВ)ред
рд╣рдо рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдЕрдм django рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред Wsgi рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ:
$ cd habr/wsgi/ $ django-admin startproject habr
рд╣рдо wsgi рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╛рдЗрд▓ рдХреЛ рдПрдбрд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ:
Django рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
install_requires=['Django>=1.3'],
рд╕реЗрдЯрдЕрдкрдлреНрд░реАрдбрдо рдлрд╛рдЗрд▓ рдореЗрдВ рдУрдкрдирд╢рдлреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореВрд▓ рдореЗрдВ рд╣реИред
рдЕрдм рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдпрд╣ рд╕рдм рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Wsgi рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, git рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ:
$ git add habr $ git commit -a -m "Initialization" $ git push
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рд╕рд░реНрд╡рд░ рдкрд░ django рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 1.5.1, рдЕрд░реНрдерд╛рдд рдЖрдЬ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг)ред
рдЕрдВрдд рдореЗрдВ, рд╣рдо django start page рджреЗрдЦрддреЗ рд╣реИрдВ:

рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рдПрдХ mysql рдбреЗрдЯрд╛рдмреЗрд╕, phpmyadmin рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ django рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
Mysql рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдХреЛ habr рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
$ rhc cartridge add mysql-5.1 -a habr
рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ rcc рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рд╣реЗрдЬреЗрдВ:
Added mysql-5.1 to application habr MySQL 5.1 database added. Please make note of these credentials: Root User: Root Password: Database Name: habr Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/ You can manage your new MySQL database by also embedding phpmyadmin-3.4. The phpmyadmin username and password will be the same as the MySQL credentials above.
Phpmyadmin рдЬреЛрдбрд╝реЗрдВ:
$ rhc cartridge add phpmyadmin-3.4 -a habr
Phpmyadmin рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рд▓реЙрдЧрд┐рди рдирд╛рдо рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо рдХрд╛ рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИред
рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
habr-lamazavr.rhcloud.com/phpmyadminрд╕рд░реНрд╡рд░ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ phpmyadmin рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рд╕рд┐рдВрдХрдмреЙрдм рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП django рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
'ENGINE': 'django.db.backends.mysql',
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдУрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ рдФрд░ рднрд░реЗрдВ:
$ git commit -a -m "db init" $ git push
рд╕реНрдирд╛рддрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдПрдХ 501 рддреНрд░реБрдЯрд┐ рджреЗрдЦрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:
$ rhc tail habr
рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рдмрдирд╛рдПрдВрдЧреЗ:
$ django-admin startapp habrapp
рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
'habrapp',
django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдирд┐рдкрдЯрд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ INSTALLED_APPS рдореЗрдВред
рдЖрдЗрдП рдХреНрд░рдорд╢рдГ рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ habr / habr рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА (рд╕реЗрдЯрд┐рдВрдЧ рдерд┐рдВрдХрдкреИрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ) рдФрд░ рдЗрд╕рдореЗрдВ index.html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="/media/css/style.css" type="text/css" /> <title>{{title}}</title> </head> <body> <h3>{{text}}</h3> </body> </html>
рд╣рдо рджреГрд╢реНрдп рдореЗрдВ рджреГрд╢реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
from django.shortcuts import render_to_response def index(request): c = { 'title': 'Habratitle', 'text': 'Hello habrahabr from OpenShift!',} return render_to_response('index.html',c)
Urls.py рдореЗрдВ url рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
(r'^$','habrapp.views.index'),
рдЕрдм рд╣рдо рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдлрд╝рд╛рдЗрд▓:
TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__),'templates').replace('\\','/'), )
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ gjango рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ git рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
$ git add templates/ $ git add habrapp/
рдореИрдВ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрддрд╛, рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред
рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдФрд░ рднрд░реЗрдВ
$ git commit -a -m 'views add' $ git push
рд╣рдо рдЕрдкрдирд╛ рдкреЗрдЬ рджреЗрдЦрддреЗ рд╣реИрдВред
рдЦреИрд░, рдЕрдм рдХреЗрд╡рд▓ рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛рдИред
рдкрд╣рд▓реЗ рд╣рдо рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рдПрдбрдорд┐рди рдлрд╛рдЗрд▓реНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:
$ python manage.py collectstatic
рд╣рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдлрд╝реЛрд▓реНрдбрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо wsgi рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
Wsgi рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ .htaccess рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
RewriteEngine On
RewriteRule ^application/media/(.+)$ /static/media/$1 [L]
рдФрд░ рдмрд╕ рдРрд╕реЗ рд╣реА! рдЖрд╡реЗрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдирд╣реАрдВред
рд╣рдо рдЗрд╕рдореЗрдВ рдореАрдбрд┐рдпрд╛ / рд╕реАрдПрд╕рдПрд╕ / рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВред style.css рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрднрд┐рд╡рд╛рджрди рдХрд╛ рд░рдВрдЧ рдЬреЛрдбрд╝реЗрдВред
h3 { color: #6DA3BD; }
рдмрдирд╛рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛:
$ git add . $ git add . $ git add .htaccess $ git commit -a -m 'media files' $ git push
рд╣рдо рдкреЗрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╛рда рдиреЗ рд░рдВрдЧ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ред