AppFog и Django. С чего начать?

от автора

Доброго времени суток, уважаемые хабровчане! Недавно я заинтересовался Python и, в частности, веб-фреймворком Django. После ознакомления с основными возможностями захотелось найти бесплатный хостинг с поддержкой Django. Каюсь, в тот момент напрочь забыл про GAE, но, почитав вчера про оный, понял, что выбор получился ничуть не хуже. Итак, встречайте, AppFog!

Что нам позволяет беслатный аккаунт?

  • Подключение до 8 сервисов
  • 100 мб. для базы данных MySQL или PostgreSQL
  • 10 мб. RAM и до 6 одновременным подключений для Redis, MongoDB и RabbitMQ
  • 5 гб. трафика в месяц
  • 100 запросов в секунду
  • Помощь в рамках сообщества
  • Приложения располагаются на доменах *.af.cm

К сожалению, за плюшки вроде SSH нужно платить. Сам прайс. Ну а мы регистрируем бесплатный аккаунт и получаем на мыло сообщение с ключом подтверждения (у меня уже второй день с данным этапом какая-то лажа). После этого нас должно перекинуть по адресу https://console.appfog.com/, где мы и будем создавать наше приложение.

http://console.appfog.com

Создаем приложение

Нажимаем на кнопку New App и выбираем нужную нам платформу. В принципе, тут я испытал вау-эффект, ибо список впечатляет. Выбираем Django.

Выбираем платформу

Далее нам нужно выбрать расположение сервера. Как вы видите, не все сервера поддерживают разные платформы. Я выбрал AWS Europe West. Далее вводим имя домена для нашего сайта.

Выбираем сервер и вводим имя домена

Нажимаем Create App. Попадаем на страницу, где нам покажут «лог» создания приложения.

Создание приложения

После создания нас автоматически перекинет на страницу приложения

Страница приложения

Services — мы можем управлять сервисами нашего приложения.

Services

Add-ons — можно установить дополнительные возможности. Страница большая, поэтому я просто дам их список:

Logentries, Redis Cloud, Xeround, Searchify, MongoHQ, MongoLab, Blitz, ClearDB, MemCachier, Cloudinary, IronMQ, Nexmo, IronWorker, CloudMailin, Mailgun

Update source code — немного ниже.
Domain names — позволяет добавлять собственные домены. Но… *барабанная дробь* Недоступно на бесплатном аккаунте.
Env variables — позволяет добавлять переменные окружения.
SSL — недоступно на бесплатном аккаунте.
Clone — клонирует приложение на другой сервер.
Settings — одна единственная кнопка — Delete App.

А теперь снова ложка дегтя (хотя, кому как) — для обновления кода приложения нам нужен Ruby и гем af. Так как у меня стоит винда, тянем установщик. Идем на страницу Ruby Installer и качаем инсталятор. В процессе установки он спросит, нужно ли добавлять путь к руби в переменную Path — ставим галку (для неискушенных пользователей, «профи» могут и не делать). И, да, ВНИМАНИЕ — гем AppFog не работает под Cygwin — зависает после ввода логина (их трабла).

Итак, после установки руби открываем консоль и вводим

gem update --system gem install af

Далее, заходим на страницу Update source code и нажимаем на кнопку Download source code (внимательные люди уже заметили, что эта кнопка присутствует и в шапке косоли). Нам отдадут zip с кодом. Распаковываем его в какую-нибудь папку и заходим в нее через консоль. Теперь нам надо залогиниться в AppFog:

af login [WARNING] DL is deprecated, please use Fiddle Attempting login to [https://api.appfog.com] Email: youremail@example.com Password: ************** Successfully logged into [https://api.appfog.com]

Нижесказанное будет написанно для таких же раков, как и я 🙂

А теперь давайте изменим наш код. Для начала откроем setting.py и сделаем следующие изменения:

  • Поставим DEBUG в False
  • Найдем строку PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) и переместим ее в начало, под строку MANAGERS = ADMINS
  • После предыдущей строки добавим список разрешенных хостов, в который добавим наш домен: ALLOWED_HOSTS = [‘habratest.eu01.aws.af.cm/’,]
  • Заменим STATIC_ROOT = » на STATIC_ROOT = os.path.join(PROJECT_ROOT, ‘static’)

Далее создадим views.py и впишем в него:

views.py

from django.shortcuts import render_to_response  def index(request):     return render_to_response('index.html')

Откроем urls.py и сделаем следующие изменения:

urls.py

from django.conf.urls.defaults import patterns, include, url import settings from views import *  urlpatterns = patterns('',     url(r'^$', index),     (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), #это нужно для доступа к статическим файлам )

Создадим файл base.html в папке templates, приведем его к виду

base.html

<!doctype html> <html lang="ru"> <head>     <meta charset="UTF-8">     <title>{% block title %}{% endblock %}</title> </head> <body> 	{% block content %}{% endblock %} </body> </html>

Изменим файл index.html

index.html

{% extends "base.html" %}  {% block title %}Django page{% endblock %}  {% block content %}     <h1>Welcome to habratest Django page!</h1> {% endblock %}

И создадим файл 404.html

404.html

{% extends "base.html" %}  {% block title %}404{% endblock %}  {% block content %}     <h1>404 ERROR</h1> {% endblock %}

По аналогии можно создать шаблон для 500 ошибки.

Апдейтим приложение

После всех манипуляций нам надо загрузить приложение обратно в облако. Снова заходим в консоль и пишем

af update habratest  [WARNING] DL is deprecated, please use Fiddle Uploading Application:   Checking for available resources: OK   Packing application: OK   Uploading (5K): Push Status: OK Stopping Application 'habratest': OK Staging Application 'habratest': ...                                                                                  Staging Application 'habratest': OK Starting Application 'habratest': ..                                                                                  Starting Application 'habratest': OK  

После завершения переходим на наш хабратест и видим страницу. 🙂 Поздравляю, вы только что захостили простейшее приложение в облаке!

Вместо послесловия

Я прошу прощения за отсутствие информации про подключение базы данных и работу с ней — я только начал изучать Django и пока еще не взялся за базу данных.
Если кто-то не хочет регать аккаунт — я могу дать данные от этой тестовой учетки, пишите в личку.
Большое спасибо за ваше внимание, надеюсь не утомил.

ссылка на оригинал статьи http://habrahabr.ru/post/176607/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *