Развертывание локального приложения django с помощью openshift

Я построил webapp, используя django. Чтобы разместить его, я пытаюсь использовать openshift, но мне трудно получить что-то работающее. Кажется, что для этого нет шага за шагом. Пока у меня git работает нормально, приложение работает в локальной среде dev, и я успешно создал приложение в openshift.

Следуя URL-адресу в раскрывающемся списке сразу после создания, я просто получаю стандартную страницу "Добро пожаловать в ваше приложение Openshift".

Я следил за этим https://developers.openshift.com/en/python-getting-started.html#step1, чтобы попробовать изменить файл wsgi.py. Изменил его, чтобы приветствовать мир, подтолкнул его, и все же я все равно получаю открытую страницу по умолчанию.

Есть ли хороший всеобъемлющий ресурс для локальных приложений Django и работает на Openshift? Большинство из того, что я могу найти в google, - это просто примеры приложений, которые не так полезны, поскольку у меня уже есть моя.

Ответы

Ответ 1

Изменить. Помните, что это зависит от платформы, и поскольку платформа OpenShift, обслуживающая Django, может измениться, этот ответ может стать недействительным. По состоянию на 1 апреля 2016 года этот ответ остается в силе в полном объеме.

Много раз это происходило со мной, и, поскольку мне приходилось устанавливать не менее 5 приложений, мне пришлось создать собственный жизненный цикл:

  • Не используйте картридж Django, а патрон python 2.7. Использование корзины Django. и попытка обновить версию django приносит много головных болей, не включается, если вы делаете это с нуля.
  • Клонирование вашего репозитория через git. Вы получите yourproject и...

    # git clone [email protected]:app.git yourproject <- replace it with your actual openshift repo address
    
    yourproject/
    +---wsgi.py
    +---setup.py
    *---.openshift/ (with its contents - I omit them now)
    
  • Сделайте virtualenv для своего нового репозитория, клонированного на ваш локальный компьютер. Активируйте его и установите Django через pip и все зависимости, которые вам понадобятся (например, новый пакет подушек, пакет базы данных MySQL,...). Создайте проект django. Скажем, ваш проект. Изменить Создайте вместе с wsgi/static каталог с пустым, фиктивным файлом (например, .gitkeep - это просто соглашение: вы можете использовать любое имя, которое вы хотите).

     #assuming you have virtualenv-wrapper installed and set-up
     mkvirtualenv myenvironment
     workon myenvironment
     pip install Django[==x.y[.z]] #select your version; optional.
     #creating the project inside the git repository
     cd path/to/yourproject/
     django-admin.py startproject yourjdproject .
     #creating dummy wsgi/static directory for collectstatic
     mkdir -p wsgi/static
     touch wsgi/static/.gitkeep
    
  • Создайте приложение django. Скажите, yourapp. Включите его в свой проект.

  • У вас будет что-то вроде этого (django 1.7):

    yourproject/
    +---wsgi/
    |   +---static/
    |       +---.gitkeep
    +---wsgi.py
    +---setup.py
    +---.openshift/ (with its contents - I omit them now)
    +---yourdjproject/
    |   +----__init__.py
    |   +----urls.py
    |   +----settings.py
    |   +----wsgi.py
    +---+yourapp/
        +----__init__.py
        +----models.py
        +----views.py
        +----tests.py
        +----migrations
             +---__init__.py
    
  • Настройте свое приложение django, как вы всегда (я не буду подробно описывать его здесь). Не забудьте включить все зависимости, которые вы установили, в файл setup.py соответственно (этот ответ не является местом для описания ПОЧЕМУ, но setup.py - это установщик пакетов, а openshift использует его для переустановки вашего приложения для каждого развертывания, поэтому храните он обновляется с зависимостями).

  • Создайте свои миграции для своих моделей.
  • Отредактируйте WSGI script, указанный при открытии спуска, следующим образом. Вы будете включать приложение WSJI django ПОСЛЕ, включая virtualenv (openshift создает один для патронов python), поэтому pythonpath будет правильно настроен.

    #!/usr/bin/python
    import os
    virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
    virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
    try:
        execfile(virtualenv, dict(__file__=virtualenv))
    except IOError:
        pass
    
    from yourdjproject.wsgi import application
    
  • Отредактируйте крючки в .openshift/action_hooks для автоматического выполнения дробления и управления мультимедиа:

    построить крюк

    #!/bin/bash
    #this is .openshift/action/hooks/build
    #remember to make it +x so openshift can run it.
    if [ ! -d ${OPENSHIFT_DATA_DIR}media ]; then
        mkdir -p ${OPENSHIFT_DATA_DIR}media
    fi
    ln -snf ${OPENSHIFT_DATA_DIR}media $OPENSHIFT_REPO_DIR/wsgi/static/media
    
    ######################### end of file
    

    развернуть hook

    #!/bin/bash
    #this one is the deploy hook .openshift/action_hooks/deploy
    source $OPENSHIFT_HOMEDIR/python/virtenv/bin/activate
    cd $OPENSHIFT_REPO_DIR
    echo "Executing 'python manage.py migrate'"
    python manage.py migrate
    echo "Executing 'python manage.py collectstatic --noinput'"
    python manage.py collectstatic --noinput
    
    ########################### end of file
    
  • Теперь у вас есть wsgi ready, указывающий на django wsgi по импорту, и у вас есть ваши скрипты. Настало время рассмотреть места для статических и мультимедийных файлов, которые мы использовали в таких сценариях. Измените настройки Django, чтобы указать, где именно вы хотите:

    STATIC_URL = '/static/'
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'wsgi', 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'wsgi', 'static', 'media')
    STATICFILES_DIRS = (os.path.join(BASE_DIR, 'yourjdproject', 'static'),)
    TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'yourjdproject', 'templates'),)
    
  • Создайте образец представления, образец модели, образец миграции и PUSH все.

  • Изменить. Не забудьте установить правильные настройки для рассмотрения обеих сред, чтобы вы могли протестировать и запустить в локальной среде AND в режиме спуска (обычно это связано с наличием local_settings.py, опционально импортируется, если файл существует, но я опускаю эту часть и помещаю все в один и тот же файл). Пожалуйста, внимательно прочтите этот файл, так как такие вещи, как yourlocaldbname , являются значениями, которые вы ДОЛЖНЫ установить соответственно:

    """
    Django settings for yourdjproject project.
    
    For more information on this file, see
    https://docs.djangoproject.com/en/1.7/topics/settings/
    
    For the full list of settings and their values, see
    https://docs.djangoproject.com/en/1.7/ref/settings/
    """
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    
    ON_OPENSHIFT = False
    if 'OPENSHIFT_REPO_DIR' in os.environ:
        ON_OPENSHIFT = True
    
    
    # Quick-start development settings - unsuitable for production
    # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
    
    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY = '60e32dn-za#y=x!551tditnset([email protected])b$hn&0$ec5-j7'
    
    # Application definition
    
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'yourapp',
        #more apps here
    )
    
    MIDDLEWARE_CLASSES = (
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
    )
    
    ROOT_URLCONF = 'yourdjproject.urls'
    
    WSGI_APPLICATION = 'yourdjproject.wsgi.application'
    
    # Database
    # https://docs.djangoproject.com/en/1.7/ref/settings/#databases
    
    if ON_OPENSHIFT:
        DEBUG = True
        TEMPLATE_DEBUG = False
        ALLOWED_HOSTS = ['*']
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'youropenshiftgenerateddatabasename',
                'USER': os.getenv('OPENSHIFT_MYSQL_DB_USERNAME'),
                'PASSWORD': os.getenv('OPENSHIFT_MYSQL_DB_PASSWORD'),
                'HOST': os.getenv('OPENSHIFT_MYSQL_DB_HOST'),
                'PORT': os.getenv('OPENSHIFT_MYSQL_DB_PORT'),
                }
        }
    else:
        DEBUG = True
        TEMPLATE_DEBUG = True
        ALLOWED_HOSTS = []
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql', #If you want to use MySQL
                'NAME': 'yourlocaldbname',
                'USER': 'yourlocalusername',
                'PASSWORD': 'yourlocaluserpassword',
                'HOST': 'yourlocaldbhost',
                'PORT': '3306', #this will be the case for MySQL
            }
        }
    
    # Internationalization
    # https://docs.djangoproject.com/en/1.7/topics/i18n/
    
    LANGUAGE_CODE = 'yr-LC'
    TIME_ZONE = 'Your/Timezone/Here'
    USE_I18N = True
    USE_L10N = True
    USE_TZ = True
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/1.7/howto/static-files/
    
    STATIC_URL = '/static/'
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'wsgi', 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'wsgi', 'static', 'media')
    STATICFILES_DIRS = (os.path.join(BASE_DIR, 'yourdjproject', 'static'),)
    TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'yourdjproject', 'templates'),)
    
  • Git добавить, зафиксировать, нажать, наслаждаться.

    cd path/to/yourproject/
    git add .
    git commit -m "Your Message"
    git push origin master # THIS COMMAND WILL TAKE LONG
    # git enjoy
    
  • Пример вашего приложения Django почти готов к работе! Но если ваше приложение имеет внешние зависимости, оно будет дуть без видимых причин. Именно по этой причине я сказал вам разработать простое приложение. Теперь пришло время, чтобы ваши зависимости работали.

    [untested!] Вы можете отредактировать крючок развертывания и добавить команду после команды cd $OPENSHIFT_REPO_DIR, например: pip install -r requirements.txt, предполагая, что файл requirements.txt существует в вашем проекте. pip должен существовать в вашем virtualenv, но если это не так, вы можете увидеть следующее решение.

    В качестве альтернативы setup.py - это уже предоставленный подход OpenShift. То, что я делал много раз, заключается в том, что файл требований .txt существует:

    • Откройте этот файл, прочитайте все его строки.
    • Для каждой строки, если она имеет #, удалите # и все после.
    • strip ведущие и конечные пробелы.
    • Отбросить пустые строки и получить результат (т.е. оставшиеся строки) в виде массива.
    • Этот результат должен быть назначен аргументу ключевого слова install_requires= в вызове setup в файле setup.py.

    Простите, что я не включил это в учебник раньше! Но вам нужно фактически установить Django на сервере. Возможно, очевидное предложение, и каждый разработчик Python знал об этом заранее. Но воспользовавшись этой возможностью, я замечаю: включите соответствующую зависимость Django в файле requirements.txt(или setup.py в зависимости от того, используете ли вы файл требований .txt или нет), поскольку вы включаете любую другую зависимость.

Это поможет вам смонтировать приложение Django и потребовало много времени для стандартизации процесса. Наслаждайтесь им и не стесняйтесь обращаться ко мне через комментарий, если что-то пойдет не так.

Изменить (для тех, у кого такая же проблема, которые не ожидали найти ответ в этих комментариях): Помните, что если вы редактируете сборку или развертывание файлов крюка под Windows и вы нажимаете файлы, они будут летать на сервер с разрешениями 0644, поскольку Windows не поддерживает эту схему разрешений, которую имеет Unix, и не имеет возможности назначать разрешения, поскольку эти файлы не имеют расширения. Вы заметите это, потому что ваши скрипты не будут выполняться при развертывании. Поэтому попробуйте развернуть эти файлы только из систем на основе Unix.

Изменить 2. Вы можете использовать git hooks (например, pre_commit) для установки разрешений для определенных файлов, таких как сценарии конвейера (сборка, развертывание,...). См. Комментарии @StijndeWitt и @OliverBurdekin в этом ответе, а также этот вопрос для более подробной информации.

Ответ 2

1)  Step 1 install  Rubygems
Ubuntu - https://rubygems.org/pages/download
Windows - https://forwardhq.com/support/installing-ruby-windows
$ gem
or
C:\Windows\System32>gem
RubyGems is a sophisticated package manager for Ruby.  This is a
basic help message containing pointers to more information……..

2)  Step 2:
$ gem install rhc
Or
C:\Windows\System32> gem install rhc

3)  $ rhc
Or
C:\Windows\System32> rhc

Usage: rhc [--help] [--version] [--debug] <command> [<args>]
Command line interface for OpenShift.

4)  $ rhc app create -a mysite -t python-2.7
Or 
C:\Windows\System32>  rhc app create -a mysite -t python-2.7
# Here mysite would be the sitename of your choice
#It will ask you to enter your openshift account id and password

Login to openshift.redhat.com: Enter your openshift id here
Password : **********


Application Options
---------------------
Domain:    mytutorials
Cartridges: python-2.7
Gear Size:  Default
Scaling:    no

......
......

Your application 'mysite' is now available.

 URL : http://mysite.....................
 SSH to :  39394949......................
 Git remote: ssh://......................

Run 'rhc show-app mysite' for more details about your app.

5)  Clone your site
$ rhc git-clone mysite
Or
D:\> rhc git-clone mysite
.......................
Your application Git repository has been cloned to "D:\mysite"

6)  #"D:\mysite>" is the location we cloned.
D:\mysite> git remote add upstream -m master git://github.com/rancavil/django-openshift-quickstart.git

D:\mysite> git pull -s recursive -X theirs upstream master

7)  D:\mysite> git push
remote : ................
remote: Django application credentials
               user: admin
               xertefkefkt

remote: Git Post-Receive Result: success
.............

8)  D:\mysite>virtualenv venv --no-site-packages
D:\mysite>venv\Scripts\activate.bat
<venv> D:\mysite> python setup.py install
creating .....
Searching for Django<=1.6
.............
Finished processing dependencies for mysite==1.0

9)  Change admin password
<venv> D:\mysite\wsgi\openshift> python manage.py changepassword admin
password:
...
Password changed successfully for user 'admin'
<venv> D:\mysite\wsgi\openshift> python manage.py runserver
Validating models….

10) Git add
<venv> D:\mysite> git add.
<venv> D:\mysite> git commit -am"activating the app on Django / Openshift"
   .......
<venv> D:\mysite> git push



#----------------------------------------------------------------------------------
#-----------Edit your setup.py in mysite with packages you want to install----------

from setuptools import setup

import os

# Put here required packages
packages = ['Django<=1.6',  'lxml', 'beautifulsoup4', 'openpyxl']

if 'REDISCLOUD_URL' in os.environ and 'REDISCLOUD_PORT' in os.environ and 'REDISCLOUD_PASSWORD' in os.environ:
     packages.append('django-redis-cache')
     packages.append('hiredis')

setup(name='mysite',
      version='1.0',
      description='OpenShift App',
      author='Tanveer Alam',
      author_email='[email protected]',
      url='https://pypi.python.org/pypi',
      install_requires=packages,
)

Ответ 3

Это шаги, которые работают для меня: Я сделал несколько шагов вручную, но вы можете автоматизировать их позже, чтобы сделать их с каждой командой push.

  • Создайте новое приложение django с помощью python-3.3 от мастера веб-сайта
  • Добавьте в приложение mysql-картридж (мой вариант - mysql)
  • git клон создал приложение для локального
  • добавить файл требований .txt в корневую папку
  • Добавить папку myapp в wsgi
  • Изменить приложение для ссылки на myapp
  • выполнить git добавить, зафиксировать, нажать
  • Обзор ошибок приложения и отладки с помощью "rhc tail myapp"
  • подключиться к консоли ssh

    rhc ssh myapp

10.execute this

source $OPENSHIFT_HOMEDIR/python/virtenv/venv/bin/activate
  1. установить отсутствующие пакеты, если есть
  2. перейти в каталог приложения

    cd ~/app-root/runtime/repo/wsgi/app_name

  3. выполните миграцию с помощью:

    python manage.py migrate

  4. создать супер пользователя:

    python manage.py createuperuser

15. Перезагрузите приложение