качество и надёжность с 2008 года

8 (800) 200-25-11

Техническая поддержка support@komtet.ru —

круглосуточно и без выходных дней

load-whois

Онлайн-касса

для интернет-магазина

Подключите ваш интернет-магазин

к онлайн-кассе в соответствии с 54-ФЗ

Главная Техническая библиотека Фреймворки TurboGears Создание и перенос проекта на TurboGears

Создание и перенос проекта на TurboGears

Руководство по созданию проекта на TurboGears.

Фреймворк TurboGears поддерживается на тарифах «Профи», «Плюс», «Vip» виртуального хостинга. Рекомендуется подключение SSH.

Создание проекта (обязателен полный доступ ssh)

  1. По ssh заходим на свою площадку нашего хостинга.
  2. Перемещаемся в каталог /private (Приложения python лучше разворачивать в каталог private, т.к. в случае установки в каталог httpdocs злоумышленники могут легко получить доступ к персональной информации, например, узнать пароль к базе данных.)
  3. В данном каталоге выполняем следующие команды:
  • Прописываем переменную кэша:
    # export PYTHON_EGG_CACHE="/home/vhosts/ИМЯ_ДОМЕНА/private/.python-eggs"
  • Создаем "скелет" проекта:
    # /opt/python27/turbogears/2.0/bin/paster quickstart
    Следуя инструкциям установки, указываем:
    Enter project name: - имя проекта
    Enter package name [имя проекта]: - имя основного каталога проекта
    Do you need Identity (usernames/passwords) in this project? [no] - нужен ли пользователь и пароль к нему в этом проекте. Если указать no, то начнется установка проекта в Ваш каталог, если указать yes,  то перед началом установки необходимо указать имя пользователя и пароль к нему.   
  1. В каталоге /httpdocs создаем два файла следующего вида:
  • .htaccess:
    AddDefaultCharset utf-8
    Options +ExecCGI
    AddHandler fcgid-script .fcgi
    RewriteEngine On
    RewriteRule   ^(dispatch\.fcgi/.*)$  - [L]
    RewriteRule   ^(.*)$  dispatch.fcgi/$1 [L]
  • dispatch.fcgi:
    #!/opt/python27/turbogears/2.0/bin/python
    turbogears = '/home/vhosts/ИМЯ_ДОМЕНА/private/ИМЯ_ПРОЕКТА'
    inifile = 'development.ini'
    import sys, os
    os.environ['PYTHON_EGG_CACHE'] = "/home/vhosts/ИМЯ_ДОМЕНА/private/.python-eggs"
    sys.path.insert(0, turbogears)
    from paste.deploy import loadapp
    wsgi_app = loadapp('config:' + turbogears + '/' + inifile)
    if __name__ == '__main__':
        from flup.server.fcgi import WSGIServer
        WSGIServer(wsgi_app).run()
  1. Устанавливаем права доступа:
  • .htaccess - 644
  • dispatch.fcgi - 700
    # chmod 644 .htaccess
    # chmod 744 dispatch.fcgi
  1. Готово.

 

Перенос проекта (необязателен полный доступ ssh)

  1. Закачиваем готовый проект turbogears на вашу площадку в папку /private
  2. Закачиваем дамп БД с помощью консоли или phpMyAdmin.
  3. Создаем файлы .htaccess (согласно пункту 4 - Создание проекта) и dispatch.fcgi:
    dispatch.fcgi (для версий turbogears ниже 2.0):
    #!/opt/python25/bin/python
    #
    # File name: tg_fastcgi.fcgi
    #
    
    import cherrypy
    import sys
    import os
    os.environ['PYTHON_EGG_CACHE'] =  "/home/vhosts/ИМЯ_ДОМЕНА/private/.python-eggs"
    from os.path import *
    import pkg_resources
    import turbogears
    
    pkg_resources.require("TurboGears")
    
    # -- START USER EDIT SECTION
    # -- Users must edit this section --
    code_dir = '/home/vhosts/ИМЯ_ДОМЕНА/private/ИМЯ_ПРОЕКТА'
    root_class_name = 'ИМЯ_ПРОЕКТА.controllers.Root'
    project_module_name = 'ИМЯ_ПРОЕКТА.config.app'
    log_dir = '/home/vhosts/ИМЯ_ДОМЕНА/private/ИМЯ_ПРОЕКТА'                                
    # -- END USER EDIT SECTION
    
    class VirtualPathFilter(object):
        def on_start_resource(self):
            if not cherrypy.config.get
    ('virtual_path_filter.on', False):
                return
            prefix = cherrypy.config.get
    ('virtual_path_filter.prefix', '')
            if not prefix:
                return
    
            path = cherrypy.request.path
            if path == prefix:
                path = '/'
            elif path.startswith(prefix):
                path = path[len(prefix):]
            else:
                raise cherrypy.NotFound(path)
    
            cherrypy.request.path = path
    
            path = cherrypy.request.object_path
            if path == prefix:
                path = '/'
            elif path.startswith(prefix):
                path = path[len(prefix):]
            else:
                raise cherrypy.NotFound(path)
    
            cherrypy.request.object_path = path
    
    def tg_init():
    """ Checks for the required data and initializes the application. """
    
        global code_dir
        global root_class_name
        global log_dir
        global project_module_name
        last_mark = 0
    
        # Input checks
        if not code_dir or not isdir(code_dir):
            raise ValueError("""The code directory setting is missing.
                                The fastcgi code will be unable to find
                                the TG code without this setting.""")
    
        if not root_class_name:
            raise ValueError("""The fully qualified root class name must
                                be provided.""")
    
        last_mark = root_class_name.rfind('.')
    
        if (last_mark < 1) or (last_mark + 1) == len(root_class_name):
            raise ValueError("""The user-defined class name is invalid.
                                Please make sure to include a fully
                                qualified class name for the root_class
                                value (e.g. wiki20.controllers.Root).""")
    
        sys.path.append(code_dir)
    
        # Change the directory so the TG log file will not be written to the
        # web app root.
        if log_dir and isdir(log_dir):
            os.chdir(log_dir)
        else:
            os.chdir(code_dir)
            log_dir = code_dir
    
        sys.stdout = open(join(log_dir, 'stdout.log'),'a')
        sys.stderr = open(join(log_dir, 'stderr.log'),'a')
       if exists(join(code_dir, "setup.py")):
            turbogears.update_config(configfile=join(code_dir, "devcfg.py"),modulename=project_module_name)
        else:
            turbogears.update_config(configfile=join(code_dir, "prodcfg.py"),modulename=project_module_name)
    
        # Set environment to production to disable auto-reload and
        # add virutal path information.
        cherrypy.config.update({
            'global': {'server.environment': 'production'}})
    
        # Parse out the root class information for Cherrypy Root class.
        package_name = root_class_name[:last_mark]
        class_name = root_class_name[last_mark+1:]
        exec('from %s import %s as Root' % (package_name, class_name))
        Root._cp_filters = [VirtualPathFilter()]
        cherrypy.root = Root()
    
    # Main section -
    # Initialize the application, then start the server.
    tg_init()
    
    from flup.server.fcgi import WSGIServer
    cherrypy.server.start(initOnly=True, serverClass=None)
    
    from cherrypy._cpwsgi import wsgiApp
    WSGIServer(application=wsgiApp).run()
    dispatch.fcgi (для версий turbogears выше 2.0):
    #!/opt/python27/turbogears/2.0/bin/python
    turbogears = '/home/vhosts/ИМЯ_ДОМЕНА/private/ИМЯ_ПРОЕКТА'
    inifile = 'development.ini'
    import sys, os
    os.environ['PYTHON_EGG_CACHE'] = "/home/vhosts/ИМЯ_ДОМЕНА/private/.python-eggs"
    sys.path.insert(0, turbogears)
    from paste.deploy import loadapp
    wsgi_app = loadapp('config:' + turbogears + '/' + inifile)
    if __name__ == '__main__':
        from flup.server.fcgi import WSGIServer
        WSGIServer(wsgi_app).run()
    Если требуется версия python ниже версии 2.7, то строку файла dispatch.fcgi
    #!/opt/python27/turbogears/2.0/bin/python
    нужно заменить на строку соответвующей требуемой версии интерпритатора, см. "Пути к интерпретаторам"
  4. Редактируем файлы конфигурации фреймворка на правильность путей и подключения к БД.
  5. Готово.

 

Если у Вас возникли какие то сложности по поводу данной темы, обращайтесь в круглосуточную Службу технической поддержки хостинга.

Другие документы на эту тему

Python

КОМТЕТ - профессиональный Python-хостинг, наши системные администраторы и программисты отлично разбираются в настройке python-приложений. Сотрудники хостинга умеют работать и с python-фреймворками Django, TurboGears, Pylons, Zope. Часто задаваемые вопросы по Python, а также различные советы, публикуются в разделе «Python» хостинга КОМТЕТ. Мы следим за новостями в мире Python - и публикуем подробные описания новых релизов Python. Сайт КОМТЕТ открыт для публикаций и дружественных авторов!

TurboGears

Фреймворк для быстрой разработки приложений в Интернет

Виртуальный хостинг Perl/PHP/Python/Ruby

Тарифные планы «Виртуальный хостинг» — от размещения статических HTML-страниц, до поддержки PHP, Python, CGI скриптов (Shell, Perl), SSI, Ruby. В рамках тарифных планов предоставляется доступ к серверам баз данных MySQL или PostgreSQL.

Клиентам — домены в подарок!
Бесплатный тест виртуального хостинга
Перенос сайта — бесплатно
Все акции
На сайте КОМТЕТ используются cookie-файлы, данные о IP-адресе и местоположении посетителей. Если, прочитав это сообщение, вы остаетесь на нашем сайте, это означает, что вы не возражаете против использования этих технологий.